ASP.Net表单身份验证 - 超时后转到登录页面

4

当超时发生时,是否可以在用户首次点击任何内容之前立即重定向到登录页面?目前,超时发生时,用户所在的页面仍然显示,但只要用户点击任何内容,它就会转到登录页面。谢谢。

2个回答

5
您需要在客户端检查会话是否过期。最简单的方法是在页面加载后使用JavaScript启动一个倒计时(与超时时间相同)。当其超时时,将用户发送到登录页。或者更好的方式是:告知用户会话已过期,因为如果您只是将他发送到某个地方,他可能不太高兴。当然,出于安全原因,我的在线银行软件确实会这样做。
以下是一个非常简单的示例:http://jsfiddle.net/39Sj6/1/
function sessionHasExpired(){
    if(confirm("Your session has expired. Do you want to go to the login page")){
        window.location = "http://google.com/?q=login";   
    }
}

var sessionTimeInMilliseconds = 1000*60*5; // here: 5 minutes
setTimeout(sessionHasExpired, sessionTimeInMilliseconds );

(在jsfiddle中,您将不会被重定向到谷歌,因为这是jsfiddle禁止的,但原则上它可以工作。)

谢谢 Andre。这是一个内部网络应用程序,某些页面上显示了一些敏感数据,所以如果在超时时自动注销,他们不会介意。你能提供一些实现此功能的示例代码吗?如果我正在使用主页面,倒计时脚本应该放在主页面上吗? - NoBullMan
我不小心把示例添加到了Mark的答案中,而不是我的答案。我也已经将示例添加到了这个答案中。如果您不想询问用户是否离开页面,请不要使用confirm()结构,而是直接设置window.location。如果脚本适用于每个页面,则可以将其添加到主页面中。请注意,如果您正在进行ajax调用,则应在每次ajax调用后重置超时时间。 - Andre Loker
再次感谢您,安德烈。有几件事情需要注意:当我点击“确定”并转到登录页面时,我可以单击浏览器的后退按钮,回到之前的页面并继续进行之前的操作。虽然已经超时,但我的会话仍然有效。此外,如果我将脚本放在主页上,当我从一个页面跳转到另一个页面时,计时器是否从0开始计时,还是继续上一次的计时? - NoBullMan

0

是的,您可以通过JavaScript定时器和ajax调用来轮询会话状态以检查服务器会话状态,然后重定向到登录页面;或者,您可以将计时器设置为指定的时间限制(20分钟或会话超时),然后重定向到登录页面。


1
如果您轮询服务器,会刷新会话。这就像打开冰箱门看看灯是否真的熄灭一样。 - Andre Loker
我没有意识到GET会刷新会话,那样行不通。虽然这可能是超时的一个很好的替代方案,有点像会话除颤器。 :) - Mark Kadlec
2
绝对不能——“该死的会话,你可别挂掉了!” :-) - Andre Loker
@AndreLoker,您能否发布一个简要的答案或提供链接,以便像我这样的人受益。谢谢。 - Mubarek

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