关闭浏览器应该清除ASP.net会话ID的会话变量。

4

我有一个ASP.net页面。当我关闭网页时,我需要清除会话变量。

为了处理这个问题,我需要保持超时时间为20分钟。如果在20分钟的超时时间内关闭并登录多次。

是否有可能清除ASP.net会话ID?


这不是 http://stackoverflow.com/questions/283591/aspnet-session-destroy-if-he-closes-the-browser 的重复吗? - Martin Brown
抱歉,但我认为你可能正在尝试解决错误的问题。为什么需要立即清除会话状态? - Kramii
6个回答

11

您不能这样做。

  1. 您不能指望事件在浏览器上发生
  2. 服务器无法与浏览器联系以查看其是否仍在运行

您无法控制最终用户的浏览器。用户可能关闭浏览器、崩溃、断开互联网连接、禁用或崩溃JavaScript等等。或者用户可能只是输入另一个URL(在此之后,用户可能通过使用“返回”按钮返回您的页面,并期望继续与您的站点保持会话)。

window.onbeforeunload会在每次卸载页面时触发。即使用户浏览到您网站上的另一页,他们也可能需要重新使用您的会话。


6

[编辑] 正如其他人所建议的那样,您的会话应该最终超时,但是如果您想在超时之前关闭会话(例如清理大型会话对象)并且可以使用javascript...

您可以使用一个window.onbeforeunload处理程序,将其提交到注销页面。

function CloseSession( )
{
    location.href = 'SignOut.aspx'; 
}
window.onbeforeunload = CloseSession;

您还可以通过AJAX来实现。 SignOut.aspx页面(或您正在使用的任何平台)应该放弃用户的会话。

1
只需准备好,如果浏览器崩溃,这个函数将不会被调用。 - Martin Brown

5

我认为唯一好的方法是在服务器上对会话变量设置超时时间。网络服务器无法确定用户是否已关闭了浏览器。

Javascript 不是一个好的选择,因为客户端可以禁用它。


不仅如此,浏览器可能会崩溃,网络连接可能会中断等等... - Martin Brown

2
如果浏览器进程结束会怎么样? 这里有一个技巧。
您不应该有太多需要清理的会话变量。请参阅帖子了解其他选项。

0

我不确定ASP.Net具体如何实现其会话,但Cookie RFC的一部分规定,会话Cookie(没有特定“过期”日期的Cookie)在浏览器关闭时被清除。

肯定有一种方法可以让ASP.Net使用正确的会话Cookie而不是具有固定超时的Cookie吧?


-2

你好,试试这个 JavaScript 函数

function ConfirmClose()  
{  
if (event.clientY < 0)  
{  
      /* Your asynchronouse request to the page and call that function*/ 
}  
}
/*now call this method on event of javascript*/      

我没有尝试过,但这只是我的想法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接