【问题标题】:Handler with IRequiresSessionState does not extend session timeout带有 IRequiresSessionState 的处理程序不会延长会话超时
【发布时间】:2011-04-22 02:46:42
【问题描述】:

我有一个处理程序,像这样,使用 IRequiresSessionState:

public class MyHandler : IHttpHandler, IRequiresSessionState
{
  // code
}

在代码中,我可以读取和设置会话值。我还检查确保调用者已登录。一切正常。

该网站使用表单身份验证,所以在 web.config 中,我有这个:

<authentication mode="Forms">
   <forms loginUrl="Login.aspx" timeout="10" slidingExpiration="true"></forms>
</authentication>

问题是从客户端到服务器代码MyHandler 的 AJAX 调用不会延长会话的生命周期!

因此,即使用户正忙于从服务器发送和接收数据,他们也会在最后一次完整页面加载后 10 分钟超时。

在处理程序中,我尝试专门更改一个值是每次调用的会话,但即使这样也不会延长超时时间。

有什么建议吗?

【问题讨论】:

    标签: asp.net session httphandler session-state ashx


    【解决方案1】:

    终于找到了解决这个问题的办法……有点。

    我放弃了让处理程序完成这项工作的尝试,而是调用了一个普通的 ASPX 页面。在该页面中,我删除了 HTML 代码,并使用 Response.Write(...) 发送回一些我想要的 JSON。但是,即使这样,我的会话也没有被延长!

    我终于意识到,在 PreRender 事件中,我使用了Response.ClearHeaders()。这就是问题所在。事实证明,Forms 身份验证系统在需要时更新了会话票证 cookie,但在我的代码运行之前将其添加到标题中。因此,当我清除标题时,我在将新 cookie 发送到浏览器之前将其擦除。

    因此,如果您遇到会话未扩展的问题,请检查以确保您的代码未使用ClearHeaders()

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 2016-04-02
      • 2011-01-17
      • 2012-10-25
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 2015-09-08
      • 2018-03-19
      相关资源
      最近更新 更多