【问题标题】:JSESSIONID Cookie rejected / lostJSESSIONID Cookie 被拒绝/丢失
【发布时间】:2012-09-27 00:21:42
【问题描述】:

与 JESSIONID Cookie 这样的幽灵有关的一些谜团苦苦挣扎。我正在使用 JESSIONID 在基于 AJAX 的站点中保持状态更改之间的会话。这在已部署的服务器上运行良好,但在使用基于 XML 的外部 servlet 在 localhost 上运行站点时却不行。

使用 HTTP Header 工具,我已经能够确定 JSESID Cookie 根本没有设置:

localhost -> 外部:尝试登录
外部 -> localhost:返回 XML 和正确的带有 JSESID 的 Set-Cookie
localhost -> external:发送没有 JSESID Cookie 的下一个请求(但是,其他 cookie 是 >getting 已发送)。

我在几台不同的计算机(和浏览器)上进行了尝试,结果是一样的。然而奇怪的是,这些解决方案确实适用于移动设备(PhoneGap + Android / iOs)。基于此,我还尝试从 file:// 运行该站点,但没有运气。

由于 servlet 已经部署(Tomcat 6),不幸的是,我无法在这方面进行任何更改,但据我所知,问题出在这方面的可能性很小。我还尝试了this thread 中建议的解决方案#1。这确实设置了一个名为 cookie 的 JSESID,但内容充满了“乱码”。

function postDataToBean(formId, callbackFunc, callbackError)
{
    $.ajaxSetup ({  
        cache: false  
    });

    var_form_data = $("#" + formId).serialize();

    var request = $.ajax({
          url: getAppBackEndURL() + $("#" + formId).attr("action"),  
          type: "POST",
          data: var_form_data,
          dataType: "xml",
          contentType : "application/x-www-form-urlencoded"       
        });

    request.done(callbackFunc);
    request.fail(callbackError);
}

【问题讨论】:

  • 服务器端的整个 Set-Cookie 响应是什么样的?您尝试访问的确切 URL 是什么?
  • 我目前无权访问该项目,但我相信响应看起来像这样:Set-Cookie: JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;PATH=/ The project在 localhost 上运行,而我正在与之通信的 servlet / 服务在 mydomain.com 上(我将尽快使用真实 URL 进行更新)。
  • 收到后请发布整个Set-Cookie,包括所有参数。
  • 设置 Cookie JSESSIONID=1234A1617578A14D9E6641BCDB68141; Path=/ 与 Wireshark 中的一样。
  • 你确定主机名每次都一样?

标签: jquery ajax tomcat jsessionid


【解决方案1】:

原来是域问题。如果设置 cookie 的域与请求它的域完全相同,则桌面浏览器将仅接受 JSES cookie。奇怪的是,在 Android 浏览器和 Safari 等移动浏览器上并非如此。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,并尝试在几天内定期解决。搜索和阅读没有结果。

    然后我在 iphone 中打开了 Safari 设置并清除了历史记录、cookie 数据并删除了网站数据。令人惊讶的是,现在一切正常。祝你好运

    【讨论】:

      猜你喜欢
      • 2022-08-22
      • 2012-07-14
      • 2018-09-30
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 2014-06-04
      相关资源
      最近更新 更多