2013-07-01 30 views
-1

我试图在关闭浏览器之前强制用户从系统注销。下面是我只能提出的代码。强制用户注销jquery ajax

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
    <script type="text/javascript"> 

     $(window).bind('beforeunload', function() { 
      return 'Please LogOut'; 
     }); 

    </script> 

我想这样做以下。显示一个确认框,如果用户按OK,然后进行ajax调用。

我试过下面的代码,但即使确认框没有显示出来。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
    <script type="text/javascript"> 

     $(window).bind('beforeunload', function() { 
      var x; 
      var r = confirm("Please LogOut"); 
      if (r == true) { 
       x = "LogOut"; 
       var url = "/User/logOut/"; 
        $.ajax({ 
        url: url, 
        data: { UserID: 1}, 
        cache: false, 
        type: "POST", 
        success: function (data) { 

        }, 
        error: function (reponse) { 
         alert("error : " + reponse); 
        } 
       }); 
      } 
      else { 
       x = "Stay On Page!"; 
      } 

     }); 

    </script> 
+0

检查了这一点http://stackoverflow.com/questions/4146647/destroy-php-session-on-closing – CME64

+1

您可能无法使用beforeunload事件来做到这一点。每个浏览器的行为不同。 Chrome会显示您的消息以及“离开此页面”和“保持页面”选项。如果用户点击“离开此页面”,则标签/浏览器关闭您的代码将无法处理。你可以做的是在窗口关闭时清除所有会话cookie – Arun

+0

你为什么要强制用户注销?用户不喜欢强迫你知道...... Asp.net肯定有更好的解决方案来解决你面临的任何问题,而不是依靠用户注销。 – nunespascal

回答

1

我们尝试了类似的方法,但当用户很容易关闭浏览器时无法检测到。

最简单的方法是使用会话作为用户访问。这意味着在每次调用时,客户端应该发送一些令牌,服务器端应该检查它。该令牌保存在客户端的Cookie /存储(会话存储,但只能在会话中作为选项卡),并且只要用户关闭窗口/选项卡,它就会过期。

当然,你的服务器端应该支持会话。对于令牌发送,我建议使用授权头,因为它可以用于大多数开发平台,如果您计划从js扩展到例如Android平台在未来的某个时候。

+0

如果用户关闭标签页/窗口 - 会话仅在20分钟后死亡,否? – kneidels

+0

这取决于服务器端。 – EnterSB