浏览器在asp.net中关闭时,这可以清除会话吗?

在我的asp.net应用程序中,我想在浏览器关闭或我的选项卡(如果我的浏览器包含多个选项卡)关闭时清除会话。

请指导我摆脱这个问题……

简短的版本,没有。服务器检测客户端是否已关闭浏览器没有可靠的方法。 这只是Web开发异步模式的本质。

长版本,如果真的,对你来说真的很重要; 在页面中放置一些javascript,在后台向您的网站发送常规post,并设置一个服务器端代理或服务,如果它没有收到这些常规的“心跳”信号,则会处理这些会话。

你可以将javascript回发放到页面的unload()事件上,但不要依赖它,它并不总是触发。

每当您关闭浏览器时,默认情况下都会发生这种情况,而这不仅仅适用于ASP.NET。 它适用于大多数具有会话状态的服务器端编程语言。 基本上,在浏览器关闭时,将删除任何未指定过期日期的cookie。

如果这不适用,则当您关闭选项卡时,这是您无法控制的选项,因为选项卡关闭事件不会被发送回Web服务器。

你可以试着用javascript做到这一点。 检查时间:

http://www.codeproject.com/Tips/154801/How-to-end-user-session-when-browser-closed

或者,您可以在每个新的浏览器开放时检查您之前的会话状态,并且可以在上一个会话中查看Session.clear()或Session.abandon()。

这将确保您每次启动应用程序时都会获得新会话。

  1. 在.net应用程序中使用BasePage。
  2. 检查关于基页加载的session.sessionid。
  3. 更多信息如何在基页中检测新会话。 BasePage.Session.Link

希望这有助于沙兹

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函数在浏览器中捕获浏览器关闭或制表符关闭事件。 大多数情况下,卸载事件会在chrome,Firefox,IE 11中捕获浏览器关闭事件。

您可以使用Global.aspx的Session_End事件

 //For Specific Session Session.Remove("SessionName"); //All the Session Session.Abandon();