Asp.net会话到期重定向到登录页面

时间:2008-12-24 16:41:15

标签: .net session .net-2.0 asp.net-2.0

会话过期时,重定向到登录页面的最佳方法是什么。我正在使用

sessionState mode="InProc"

我可以在web.config文件中设置吗?

5 个答案:

答案 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 ||