我正在编写一个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
向处理程序发出请求,如果这很重要的话。我的所有处理程序都实现了IRequiresSessionState
。 This question看起来与我的相同,唯一的答案是实施IRequiresSessionState
,我已经在做了。
修改: this question可能有关系,但我在Chrome中观察到此行为。
编辑:我正在使用jQuery的getJSON
函数来发出AJAX请求。关于getJSON
的{{3}}和Cookie可能是相关的。
答案 0 :(得分:0)
我认为我的问题可能是我使用jQuery的getJSON方法发送AJAX请求。我最终将<sessionState cookieless="true" />
添加到我的Web.config中,所以现在我的处理程序将S(the_session_id))
添加到URL中。当我将第一个请求发送到处理程序时,我将在JSON中返回的会话ID存储在HTML 5本地存储中。所有后续请求,我在URL中传递该会话ID。这不是一个理想的解决方案,我可能会进一步调查,看看我是否可以再次使用cookie。