我在一个vb.net Web应用程序中管理会话时遇到问题。我将尝试解释工作流程和问题,我希望有人知道可能发生的事情
我有一个页面user.aspx
在user.aspx.vb Page_Load函数中,我正在执行此操作:Session("userid") = userId
将标识符存储在会话中
稍后在javascript jQuery(document).ready
我正在对这样的处理程序进行ajax调用
$.getJSON('User.ashx', { a: 'getCategories' }
).done(function (json) {
//process json response
});
在User.ashx.vb中我有下一个结构
Implements System.Web.IHttpHandler, IRequiresSessionState
Sub ProcessRequestBase(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
ProcessRequest(New HttpContextWrapper(context))
End Sub
Sub ProcessRequest(ByVal context As HttpContextBase)
Dim userId As String = CStr(context.Session("userid"))
'In this point sometins userId is null and sometimes has the value
'Handle action to build json response
context.Response.Cache.SetCacheability(System.Web.HttpCacheability.ServerAndNoCache)
context.Response.Cache.SetNoStore()
context.Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate")
context.Response.AppendHeader("Pragma", "no-cache")
context.Response.AppendHeader("Expires", "0")
context.Response.ContentType = "application/json"
context.Response.Write(resp)
在page_load中我设置了几个Session变量,在Handler中的一些ajax请求中我使用了这个值。
在我的本地计算机和我尝试使用Windows 7的另一台计算机上工作正常但是在服务器中,使用Windows XP,有时当我在处理程序中收到会话时,会话是空的。
我已经检查过,所有请求之间的会话ID是相同的,但会话完全是空的,但如果我刷新页面有时会传播一些值,处理程序可以检索值,如果我继续刷新值仍然存在两三次,之后再次丢失。
我搜索了一些Session.abandon()或Session.clear(),但代码中没有
会话状态的web.config中的配置是:
<sessionState mode="InProc" cookieless="false" timeout="20"/>
有什么建议吗?