Asp.net 具有IRequiresessionState的处理程序不延长会话超时

Asp.net 具有IRequiresessionState的处理程序不延长会话超时,asp.net,session,httphandler,session-state,ashx,Asp.net,Session,Httphandler,Session State,Ashx,我有一个处理程序,像这样,使用iRequiresessionState: public class MyHandler : IHttpHandler, IRequiresSessionState { // code } 在代码中,我能够读取和设置会话值。我还检查并确保呼叫者已登录。一切正常 该网站使用表单身份验证,因此在web.config中,我有以下内容: <authentication mode="Forms"> <forms loginUrl="Login.a

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

public class MyHandler : IHttpHandler, IRequiresSessionState
{
  // code
}
在代码中,我能够读取和设置会话值。我还检查并确保呼叫者已登录。一切正常

该网站使用表单身份验证,因此在web.config中,我有以下内容:

<authentication mode="Forms">
   <forms loginUrl="Login.aspx" timeout="10" slidingExpiration="true"></forms>
</authentication>
问题在于,从客户端到服务器代码MyHandler的AJAX调用不会延长会话的生命周期

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

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


有什么建议吗?

终于找到了解决办法。。。有点

我放弃了让处理程序来做这项工作,取而代之的是调用一个普通的ASPX页面。在那个页面中,我删除了HTML代码,并使用Response.Write。。。发送一些我想要的JSON。然而,即使这样,我的课程也没有延长

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

因此,如果您在会话未扩展方面遇到问题,请检查以确保您的代码未使用ClearHeader