会话过期时,重定向到登录页面的最佳方法是什么。我正在使用
sessionState mode="InProc"
我可以在web.config文件中设置吗?
答案 0 :(得分:4)
记住会话过期的诀窍是,这发生在幕后运行的工作进程中,并且没有直接的方法来通知用户而不返回服务器来检查事物的状态。
我所做的是让页面注册一个Javascript块,在指定的超时后将用户重定向到登录页面:
Page.ClientScript.RegisterStartupScript(Me.GetType, "TimeoutScript",
"setTimeout(""top.location.href = '~/Login.aspx'""," &
ConfigurationManager.AppSettings("SessionTimeoutMilliseconds") & ");", True)
您会注意到我在web.config文件中存储了实际的毫秒数,以便我可以根据需要调整超时长度。
使用它,结合Global.asax文件中的典型Session_End事件,可以很好地处理我的Web应用程序中的会话超时。
答案 1 :(得分:2)
有点迟到的回复,但是,如果您使用标准的asp.net会员提供商,您也可以使用下面的配置。
这样做的基本思想是让您的身份验证Cookie +会话同时过期。 asp.net的自动行为是带你回到定义的登录页面。 auth cookie上的“slidingExpiration”属性需要为“true”才能在会话处于活动状态时延长其生命周期。
<system.web>
<sessionState mode="InProc" cookieless="false" timeout="20" />
<authentication mode="Forms">
<forms name=".SAMPLESITEAUTH" loginUrl="~/Login.aspx" protection="All" timeout="20" slidingExpiration="true" path="/" cookieless="UseCookies"></forms>
</authentication>
</system.web>
答案 2 :(得分:1)
一个选项而不是将客户端计时器设置为盲目重定向,是让计时器命中一个小的Web服务,这可以指示是否应该重定向用户。这样做可以为您提供更多灵活性,您可以在许多情况下重定向用户,包括:
我使用此方法取得了很大成功,用于处理多个用户帐户。至于处理会话,你甚至想要监听会话超时,甚至存储在会话超时的哈希表中。
当该用户调用Web服务时,您将其从哈希中删除,并告诉客户端代码重定向它们。
此类系统的另一个好处是,您可以跟踪浏览器何时点击服务器,这样您就可以更好地了解谁还在线。
修改强>
回应评论贝娄:
我认为调用公共方法不会更干净。一旦这样做,您就会假设所有页面共享一个母版页或公共基类。我不想做出这样的假设。此外,如果您打算使用PageMethods方法,那么这将不起作用,因为PageMethods必须是静态的。
我不确定你的意图是什么,但如果你打算在每个请求上调用这个方法,那么我会使用http模块并挂钩到管道中;但是,这仅在请求时才有效。通过使用具有客户端计时器的Web服务,您可以重定向用户,即使他们没有发出任何请求。
答案 3 :(得分:0)
你能绑定到Global.asax文件中的Session_End事件吗?
答案 4 :(得分:0)
Bellow答案是有史以来最好的例子......
最好以这种方式尝试:
Page.ClientScript.RegisterStartupScript(Me.GetType, "TimeoutScript", "setTimeout(""top.location.href = '~/Login.aspx'""," & ConfigurationManager.AppSettings("SessionTimeoutMilliseconds") & ");", True)
您会注意到我在web.config文件中存储了实际的毫秒数,以便我可以根据需要调整超时长度。
使用它,结合Global.asax文件中的典型Session_End事件,可以很好地处理我的Web应用程序中的会话超时。
此致 Nagaraju R || 戴尔PerotSystems ||