7

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

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

4

7 回答 7

11

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

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

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

于 2012-11-06T09:20:53.927 回答
2

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

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

于 2012-11-06T09:20:17.237 回答
1

您可以尝试使用 javascript 来做到这一点。检查它:

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

于 2012-11-06T09:20:08.937 回答
1

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

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

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

希望这对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                

                    }
                }


            }

}
于 2012-11-06T09:57:25.497 回答
0

我认为cookies可以更好地满足您对会话管理的要求。

这意味着会话数据不应该存储在服务器上,并且应该与您的通话一起使用,这样您就不必担心清除服务器上的数据。

于 2012-11-06T09:20:13.213 回答
-1

是的。首先,当浏览器关闭时,浏览器会自动清除会话。您可以尝试使用卸载前和卸载时的 javascript 函数在浏览器中捕获浏览器关闭或选项卡关闭事件。大多数情况下,onbefore unload 事件捕获 chrome、Firefox、IE 11 中的浏览器关闭事件。

于 2017-05-23T10:22:44.387 回答
-2

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

//For Specific Session
Session.Remove("SessionName");

//All the Session
Session.Abandon();
于 2012-11-06T09:43:31.200 回答