【发布时间】:2008-11-13 14:15:12
【问题描述】:
我有一个 ASP.net 页面。当我关闭网页时,我需要清除会话变量。
如何处理我需要将超时保持在 20 分钟。 如果他在 20 分钟超时时间内关闭并登录任意次数
是否有清除 ASP.net 会话 ID 的可能性
【问题讨论】:
-
抱歉,我认为您可能在这里尝试解决错误的问题。为什么需要立即清除会话状态?
我有一个 ASP.net 页面。当我关闭网页时,我需要清除会话变量。
如何处理我需要将超时保持在 20 分钟。 如果他在 20 分钟超时时间内关闭并登录任意次数
是否有清除 ASP.net 会话 ID 的可能性
【问题讨论】:
你不能那样做。
您无法控制最终用户的浏览器。用户可能会关闭浏览器、崩溃、断开与 Internet 的连接、禁用或崩溃 javascript 等等。或者用户可能只是输入另一个 url(然后用户可能会使用后退按钮返回您的页面,并且希望继续他/她与您的网站的会话)。
每次卸载页面都会触发 window.onbeforeunload。即使用户浏览到您网站上的另一个页面,他们也可能再次需要您的会话。
【讨论】:
[编辑] 正如其他人所建议的那样,您的会话最终应该会超时,但是如果您想在超时之前关闭会话(例如清理大型会话对象)并且您可以使用 javascript...
您可以使用window.onbeforeunload 处理程序来执行此操作,该处理程序回发到退出页面。
function CloseSession( )
{
location.href = 'SignOut.aspx';
}
window.onbeforeunload = CloseSession;
您也可以通过 AJAX 来实现。 SignOut.aspx 页面(或您正在使用的任何平台)应该放弃用户的会话。
【讨论】:
我认为唯一的好方法是在服务器上的会话变量上设置超时。 Web 服务器无法确定用户是否关闭了浏览器。
Javascript 不是一个好的选择,因为您可以在客户端禁用它。
【讨论】:
我不具体了解 ASP.Net 如何实现其会话,但 Cookie RFC 的一部分是会话 cookie(没有特定“到期”日期的)在浏览器关闭时被清除。
肯定有一种方法可以让 ASP.Net 使用适当的会话 cookie 而不是具有固定超时的那些?
【讨论】:
你好试试这个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*/
我没有尝试过,但它只是从脑海中浮现
【讨论】: