0

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

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

如果这很重要,我正在运行 jQuery Mobile 应用程序http://localhost,并向处理程序发出请求https://localhost。我所有的处理程序都实现了IRequiresSessionState. 这个问题看起来和我的一样,它唯一的答案是实现IRequiresSessionState,我已经在做。

编辑: 这个问题可能是相关的,但我在 Chrome 中观察到这种行为。

编辑:我正在使用 jQuery 的getJSON函数来发出 AJAX 请求。 这个关于getJSONcookie 的问题可能是相关的。

4

1 回答 1

0

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

于 2012-06-26T18:44:39.813 回答