关闭浏览器实际上应该清除会话变量和ASP.net会话ID

时间:2008-11-13 14:15:13

标签: asp.net session

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

如何处理这个我需要将超时维持到20分钟。 如果他在20分钟的超时时间内关闭并登录任意次数

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

6 个答案:

答案 0 :(得分:11)

你做不到。

  1. 您不能依赖浏览器上发生的事件
  2. 服务器无法联系浏览器以查看它是否还活着
  3. 您无法控制最终用户的浏览器。用户可能关闭浏览器,崩溃,断开与Internet的连接,禁用或崩溃等等。或者用户可能只是输入另一个URL(之后用户可能会使用后退按钮返回到您的页面,并且期望继续他/她的网站会议。)

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

答案 1 :(得分:5)

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

您可以使用回复到退出页面的window.onbeforeunload处理程序执行此操作。

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

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

答案 2 :(得分:5)

我认为唯一可行的方法是在服务器上设置会话变量的超时。 Web服务器无法确定用户是否已关闭其浏览器。

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

答案 3 :(得分:2)

如果浏览器进程结束怎么办?

Here是一招(

您不应该有太多需要清理的会话变量。有关其他选项,请参阅this帖子。

答案 4 :(得分:0)

我不知道ASP.Net如何实现其会话,但Cookie RFC的一部分是,只要浏览器关闭,就会清除会话cookie(没有特定“过期”日期的会话cookie)。

当然有一种方法可以使用正确的会话cookie而不是具有固定超时的cookie来获取ASP.Net吗?

答案 5 :(得分:-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*/      

我没想过这个,但它只是出自心灵