【问题标题】:.NET IHttpHandlers - different session in each AJAX request.NET IHttpHandlers - 每个 AJAX 请求中的不同会话
【发布时间】:2012-06-25 05:28:18
【问题描述】:

我正在编写一个 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 请求。 This question 关于 getJSON 和 cookie 可能是相关的。

【问题讨论】:

  • 您是否检查过您的 cookie 是否被正确传递?检查值是否在您的 asp.net 会话 cookie 中设置
  • 看起来只有当我在浏览器选项卡中向处理程序发出常规 HTTP 请求时才会设置 cookie。我在我的 JSON 中以这种方式返回的 cookie 中看到了会话 ID。然后,当我尝试加载通过 AJAX 发出请求的页面时,cookie 中的会话 ID 保持不变,并且通过 AJAX 请求返回的会话 ID 与 cookie 中的不同。
  • 你能分享你的ajax调用代码吗?还有您当前的域。那里一定有问题。
  • 嗯,我正在使用 jQuery 的 getJSON 函数。我将使用相关链接更新我的问题。

标签: .net ajax session jsonp ihttphandler


【解决方案1】:

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

【讨论】:

  • 我没有遇到过 getJSON 的问题。浏览器也会通过这些 ajax 请求发送 cookie。
猜你喜欢
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 2015-11-29
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
相关资源
最近更新 更多