1

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

sessionState mode="InProc"

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

4

5 回答 5

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 应用程序中的会话超时。

于 2008-12-24T16:50:37.377 回答
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>
于 2009-02-17T06:12:36.283 回答
1

一个选项不是将客户端计时器设置为盲目重定向,而是让计时器点击一个小型 Web 服务,该服务可以指示用户是否应该被重定向。这为您提供了更大的灵活性,您可以在许多情况下重定向用户,包括:

  • 会话已过期
  • 从另一台机器登录的相同用户帐户
  • 站点正在进入维护模式,您想将用户踢出。

我已经成功地使用了这种方法来处理多个用户帐户。至于处理会话,即使存储在会话超时的哈希表中,您也可能希望监听会话超时。

当该用户调用 Web 服务时,您将它们从哈希中删除并告诉客户端代码重定向它们。

这种系统的另一个好处是您可以跟踪浏览器何时访问服务器,这样您就可以更好地了解谁仍然在线。

编辑

回应以下评论:

我不认为调用公共方法会更干净。一旦您这样做,您就会假设所有页面共享一个母版页或公共基类。我不想做出这样的假设。此外,如果您打算使用 PageMethods 方法,这将不起作用,因为 PageMethods 必须是静态的。

我不确定您的意图是什么,但是如果您要在每个请求上调用此方法,那么我会使用 http 模块并挂钩到管道中;但是,这仅在发出请求时才有效。通过使用带有客户端计时器的 Web 服务,即使用户没有发出任何请求,您也可以重定向用户。

于 2008-12-24T18:09:46.750 回答
0

你能绑定到 Global.asax 文件中的 Session_End 事件吗?

于 2009-02-17T02:04:19.813 回答
0

贝娄答案是有史以来最好的例子......

最好尝试这种方式:

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 || 戴尔佩罗系统 ||

于 2009-11-13T10:30:59.347 回答