.NET IHttpHandlers - 每个AJAX请求中的不同会话

时间:2012-06-22 21:17:00

标签: .net ajax session jsonp ihttphandler

我正在编写一个jQuery Mobile应用程序,该应用程序向我服务器上的几个不同IHttpHandler类发出几个AJAX请求。处理程序都返回JSON或JSONP,并在JSON中包含context.Session.SessionID以进行调试。我向第一个处理程序发出一个请求,并返回会话ID“2jysbehwyxlne0knatltcb2z”。我向另一个处理程序发出另一个请求,并返回会话ID“qy3v251fxrxesbgqeobqvaza”。这是彼此之间的几秒钟。到底是怎么回事?我希望会话ID在会话到期后才会过期。

当我在自己的标签中打开请求时,而不是通过相同标签中的AJAX,我得到相同的会话ID。因此,对于我的身份验证请求以及我的其他请求来检索数据,当这些请求在页面中作为AJAX请求发生时,会话ID是不同的。当我浏览Chrome控制台中的“网络”选项卡并右键单击“在新标签中打开链接”时,每个请求都按预期运行,具有相同的会话ID。

我在http://localhost上运行jQuery Mobile应用程序,并在https://localhost向处理程序发出请求,如果这很重要的话。我的所有处理程序都实现了IRequiresSessionStateThis question看起来与我的相同,唯一的答案是实施IRequiresSessionState,我已经在做了。

修改: this question可能有关系,但我在Chrome中观察到此行为。

编辑:我正在使用jQuery的getJSON函数来发出AJAX请求。关于getJSON的{​​{3}}和Cookie可能是相关的。

1 个答案:

答案 0 :(得分:0)

我认为我的问题可能是我使用jQuery的getJSON方法发送AJAX请求。我最终将<sessionState cookieless="true" />添加到我的Web.config中,所以现在我的处理程序将S(the_session_id))添加到URL中。当我将第一个请求发送到处理程序时,我将在JSON中返回的会话ID存储在HTML 5本地存储中。所有后续请求,我在URL中传递该会话ID。这不是一个理想的解决方案,我可能会进一步调查,看看我是否可以再次使用cookie。