2012-11-06 43 views

回答

9

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

长版,如果对你来说真的很重要, 在后台发送一个普通帖子到你的网站的页面中放入一些javascript,并设置一个服务器端代理或服务,如果它不接收这些常规的“心跳”信号,它将处理这些会话。

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

+0

为心跳设置控制器操作或处理程序的替代方法是将会话超时设置为在心跳间隔后一分钟。然后浏览器会自动处理它自己的会话,因为cookie会过期。 –

+0

请不要执行javascript方法,因为这会阻止超时功能执行其中一项关键安全功能 - 如果用户离开PC,则将其签出。我保证,如果你这样做,并在您的网站上进行专业的安全审计,缺少超时将被标记为一个问题。 – elexis

0

我觉得cookies可以更好地在这里满足您的要求进行会话管理。

这意味着会话数据不应该被存储在服务器上,并 应该与你通话,让你不必担心 清除服务器上的数据。

+0

Cookie与浏览器的关闭事件有什么关系?如果用户关闭他们的浏览器,则什么都不会被解雇。 cookie将在那里,在客户端,什么都不做。 –

+0

@RenéWolferinkL:这意味着会话数据不应该存储在服务器上,应该与您的电话一起使用,以便您不必担心清除服务器上的数据。 –

1

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

如果这不适用,那么当您关闭一个选项卡时,由于选项卡关闭事件不会被发送回Web服务器,因此您无法控制该选项卡。

-1

可以使用Global.aspx

的Session_End中的事件
//For Specific Session 
Session.Remove("SessionName"); 

//All the Session 
Session.Abandon(); 
+3

iShare:对不起,它不会在浏览器关闭时触发... – Saravanan

+0

是正确的 - 如果会话超时期限(如果未明确设置,我认为IIS会相当于20分钟)会触发事件,并且没有其他请求从浏览器。所以这是一种猜测,并且在用户实际停止使用您的网站后经常会发生一段时间。 – Jon

+0

这只在会话超时时才被调用。 –

1

或者你可以检查你先前的会话状态在每一个新的浏览器开能Session.clear()或Session.abandon()以前的会话。

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

  1. 在.net应用程序中使用BasePage。
  2. 检查basepage负载上的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     

        } 
       } 


      } 

} 
0

Yes.First所有浏览器会话清晰关闭浏览器时。您可以尝试在浏览器中使用javascript函数捕获浏览器关闭或Tab关闭事件,如在卸载和卸载之前。大部分onbefore卸载事件捕获Chrome,Firefox,IE 11中的浏览器关闭事件。

相关问题