我有一个像这样的处理程序,使用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分钟超时。
在处理程序中,我尝试过专门更改一个值是每个调用的会话,但不会延长时间。
有什么建议吗?
答案 0 :(得分:0)
终于得到了一个解决方案......等等。
我放弃了尝试让处理程序完成这项工作,而是调用了一个普通的ASPX页面。在那个页面中,我删除了HTML代码,并使用Response.Write(...)发回一些我想要的JSON。然而,即使这样,我的会议也没有延长!
我终于意识到在PreRender事件中,我使用了Response.ClearHeaders()
。那就是问题所在。事实证明,Forms身份验证系统在需要时更新了会话票证cookie,但在我的代码运行之前将其添加到Headers。因此,当我清除标题时,我会在将新cookie发送到浏览器之前删除它。
因此,如果您遇到无法扩展会话的问题,请检查以确保您的代码未使用ClearHeaders()
!