具有IRequiresSessionState的处理程序不会延长会话超时

时间:2010-10-06 23:32:50

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

我有一个像这样的处理程序,使用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分钟超时。

在处理程序中,我尝试过专门更改一个值是每个调用的会话,但不会延长时间。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

终于得到了一个解决方案......等等。

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

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

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