【问题标题】:How can I handle a postback after session expires on an ASP.NET site?如何在 ASP.NET 站点上的会话过期后处理回发?
【发布时间】:2011-03-18 19:35:38
【问题描述】:

我有一个简单的 ASP.NET 4 站点。我正在使用表单身份验证。我将会话超时设置为 20 分钟。此外,当用户进行身份验证时,我将 AuthenticationTicket 设置为在 20 分钟内过期。所以通常一切正常。如果超过 20 分钟不活动并且用户请求网站上的页面,他们将被重定向回登录页面,正如我所期望的那样。

但是,假设用户位于包含表单的页面上。然后他们等待 25 分钟。然后他们去提交表格。该站点没有被重定向回登录页面,而是尝试回发,我立即收到错误,因为回发中有代码试图从 Session 中获取信息。

如果 AuthenticationTicket 和 Session 已过期,ASP.NET 似乎不会在回发时重定向回登录。我该如何处理?我希望我不必在每一页上写特殊的代码。

添加:web.config 代码

<location path="ForgotLogin.aspx">
   <system.web>
      <authorization>
         <allow users="*" />
      </authorization>
   </system.web>
</location>
<system.web>
   <authentication mode="Forms">
      <forms loginUrl="~/Login.aspx"></forms>
   </authentication>
   <authorization>
      <deny users="?" />
   </authorization>
</system.web>

科里

【问题讨论】:

  • 根据您的配置,您似乎只是失去了会话,但身份验证不会丢失,当用户将表单信息发回服务器时,会话就会丢失。您在会话中存储了哪些类型的信息?我之前遇到过这种情况,即使我指定相同的分钟数,我的身份验证 cookie 的持续时间也比我的会话长。

标签: asp.net postback session-timeout


【解决方案1】:

我认为您的会话和身份验证 cookie 有不同的超时时间。您描述的情况听起来像是一个会话超时,身份验证 cookie 仍然有效。看this article。特别是您在用户的身份验证令牌和他的会话之间是否存在依赖关系?部分适合您的情况。

【讨论】:

  • 谢谢。您包含的那个链接对我很有帮助。我把 Session 和 Authentication 搞混了。
【解决方案2】:

如果您没有在会话到期时明确将页面超时,则您确实需要检查每个页面。

创建一个基类,每个页面都从其继承 Page。在该类的页面加载事件中,检查 Session.IsNew。您可以检查其他几项以完全确定会话已过期。

【讨论】:

  • 那么您是说回发与常规页面请求有什么不同吗?当我发出常规页面请求时,我不必编写任何特殊代码。 ASP.NET 知道用户的身份验证票已过期,因此它将用户重定向到主页。但是在回发时,它似乎没有检查身份验证票。对吗?
  • 根据我的经验,是的。不幸的是,它们是两种不同的东西。
  • 请记住,身份验证模块对回发一无所知。对于身份验证模块,回发被视为与任何其他请求一样,并且其处理方式相同,因此您的问题不在身份验证/授权级别。
【解决方案3】:

我认为这不是身份验证问题。您可以通过身份验证并使会话过期。 它们的行为彼此独立。

您在会话中存储了哪些类型的信息?

如果此信息适用于页面,我建议将其保留在 ViewState 或 ControlState 中。如果您保留与用户相关的信息。我会创建一个 IHttpModule,因此每当经过身份验证的用户调用您的网站并且您的会话值为 null 时,您都会在用户点击任何页面之前重新创建它们。

【讨论】:

  • 不,我就是这样做的。就像我说的——当你点击一个页面的超链接时,它就像你期望的那样工作。如果会话已过期,则用户将被重定向到登录页面。但是,在会话过期后尝试回发时,ASP.NET 似乎不会自动为您重定向到登录页面。
  • 你能发布一些与身份验证相关的网络配置
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 2012-11-30
  • 2012-04-24
  • 2016-05-23
  • 1970-01-01
相关资源
最近更新 更多