【发布时间】:2012-10-26 05:13:53
【问题描述】:
在我的 asp.net 应用程序中,我想在我的浏览器关闭或我的标签页(如果我的浏览器包含多个标签页)关闭时清除会话。
请指导我摆脱这个问题...
【问题讨论】:
在我的 asp.net 应用程序中,我想在我的浏览器关闭或我的标签页(如果我的浏览器包含多个标签页)关闭时清除会话。
请指导我摆脱这个问题...
【问题讨论】:
短版,没有。 服务器没有可靠的方法来检测客户端是否关闭了浏览器。这只是 Web 开发异步模式的本质。
长版,如果它对你真的非常重要的话; 在页面中放置一些 javascript,在后台向您的网站发送常规帖子,并设置一个服务器端代理或服务,如果它没有收到这些常规“心跳”信号,则处理会话。
您可以在页面的 unload() 事件上放置一个 javascript 回发,但不要依赖它,它不会总是触发。
【讨论】:
默认情况下,只要您关闭浏览器,就会发生这种情况,而这不仅适用于 ASP.NET。它适用于大多数具有会话状态的服务器端编程语言。基本上,任何未指定到期日期的 cookie 都会在浏览器关闭时被删除。
这不适用的情况是,当您关闭选项卡时,您将无法控制,因为选项卡关闭事件不会被发送回 Web 服务器。
【讨论】:
您可以尝试使用 javascript 来实现。检查它:
http://www.codeproject.com/Tips/154801/How-to-end-user-session-when-browser-closed
【讨论】:
或者,您可以在每次打开新浏览器时检查您之前的会话状态,并且可以在之前的会话中使用 Session.clear() 或 Session.abandon()。
这将确保您每次启动应用程序时都会获得新会话。
希望这会有所帮助 问候 沙兹
public class BasePage : Page
{
protected string mySessionId;
private CurrentUser _currentUser;
public CurrentUser _CurrentUser
{
get { return ((CurrentUser)HttpContext.Current.Session["myCurrentUser"]); }
set { _currentUser = value; }
}
protected override void OnLoad(EventArgs e)
{
if (Session["myCurrentUser"] != null)
{
if (_CurrentUser.ProUser)
{
mySessionId = Session.SessionID; // it means New Session
}
if (!mySessionId.IsNullOrDefault() && mySessionId != Session.SessionID)
{
Session.Abandon(); //Abandon current session and start new one
}
}
}
}
【讨论】:
我认为cookies在这里可以更好地满足您对会话管理的要求。
这意味着会话数据不应存储在服务器上,并且 应该随你的电话,让你不用担心 清除服务器上的数据。
【讨论】:
是的。首先,当浏览器关闭时,浏览器会自动清除会话。您可以尝试使用 javascript 函数在浏览器中捕获浏览器关闭或选项卡关闭事件,例如在卸载之前和卸载时。主要是 onbefore unload 事件捕获 chrome、Firefox、IE 11 中的浏览器关闭事件。
【讨论】:
可以使用 Global.aspx 的 Session_End 事件
//For Specific Session
Session.Remove("SessionName");
//All the Session
Session.Abandon();
【讨论】: