在我的asp.net应用程序中,我想在浏览器关闭或我的标签(如果我的浏览器包含多个标签)关闭时清除会话。
请指导我摆脱这个问题...
答案 0 :(得分:10)
短版,不。 服务器没有可靠的方法来检测客户端是否关闭了浏览器。这只是Web开发异步模式的本质。
长版本,如果它真的对您非常重要; 在页面中放置一些javascript,在后台向您的网站发送常规帖子,并设置一个服务器代理或服务,如果它没有收到这些常规的“心跳”信号,则处理会话。
您可以将javascript回发放到页面的unload()事件中,但不要依赖它,它并不总是触发。
答案 1 :(得分:2)
默认情况下,每当您关闭浏览器时都会发生这种情况,而这不仅仅适用于ASP.NET。它适用于大多数具有会话状态的服务器端编程语言。基本上,在浏览器关闭时,将删除任何未指定过期日期的cookie。
如果不适用,则关闭选项卡时,这是您无法控制的选项卡,因为选项卡关闭事件不会被发送回Web服务器。
答案 2 :(得分:1)
您可以尝试使用javascript执行此操作。请查看:
http://www.codeproject.com/Tips/154801/How-to-end-user-session-when-browser-closed
答案 3 :(得分:1)
或者,您可以在每个新浏览器开放时检查您之前的会话状态,并且可以在上一个会话中查看Session.clear()或Session.abandon()。
这将确保每次启动应用程序时都会获得新会话。
希望这会有所帮助 问候 Shaz
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
}
}
}
}
答案 4 :(得分:0)
我认为cookies
可以更好地满足您在会话管理方面的要求。
这意味着会话数据不应存储在服务器上 应该随你的电话,这样你就不用担心了 清除服务器上的数据。
答案 5 :(得分:-1)
是。首先,浏览器关闭时,浏览器会自动清除会话。您可以尝试在卸载和卸载之前使用javascript函数在浏览器中捕获浏览器关闭或制表符关闭事件。大多数情况下,卸载事件会在chrome,Firefox,IE 11中捕获浏览器关闭事件。
答案 6 :(得分:-2)
您可以使用Global.aspx的Session_End事件
//For Specific Session
Session.Remove("SessionName");
//All the Session
Session.Abandon();