【问题标题】:Cookie is not sent with JavaScript on POST requestCookie 不是在 POST 请求中使用 JavaScript 发送的
【发布时间】:2014-11-23 19:36:29
【问题描述】:

我想在访问我网站上的端点 /access 时使用浏览器存储的安全 cookie。 cookie 在登录过程中保存,我确保我的网站在后端的子域上运行(为客户端创建 cookie)。

我的后端在 www.welovecoding.com 上运行,我的 Web 应用程序托管在 webapp.welovecoding.com 上。

我从后端收到的 cookie 如下所示:

Set-Cookie:user_id=RLXXWNCGAyVBmnogfiE1ngFCpBRKA48YaFOGyrPypwvU3eZCA==; 路径=/访问;到期=格林威治标准时间 2015 年 9 月 29 日星期二 17:37:11; 域=.welovecoding.com;仅http;安全

我现在要做的是在 www.welovecoding.com/access 上使用我的 cookie 作为身份验证凭据的 POST 请求。我在使用 jQuery 执行 AJAX 请求时发送withCredentials

$.ajax({
  crossDomain: true,
  type: 'POST',
  url: "http://www.welovecoding.com/access",
  xhrFields: {
    withCredentials: true
  }
}).done(function (data, textStatus, jqXHR) {
  console.log("Response", data);
});

但我仍然收到 HTTP 错误 403,表示 cookie 丢失。有谁知道为什么?可能是因为 cookie 设置了HttpOnlySecure

【问题讨论】:

  • 你确定你的cookie没有被拒绝吗?根据这个post应该被拒绝。

标签: javascript jquery cookies session-cookies setcookie


【解决方案1】:

是的,这是因为 cookie 设置了 Secure - 而您发布到 http

;secure (cookie to only be transmitted over secure protocol as https)

https://developer.mozilla.org/en-US/docs/Web/API/document.cookie

【讨论】:

  • 你是对的!我忘了说我还测试了从 HTTPS 到 HTTPS。但它没有用。我还有什么想念的吗?
  • 尝试删除xhrFields:{withCredentials:true},因为它用于跨域请求
  • 如果你“正在”做跨域 - 你需要设置适当的 preflight cors header staticapps.org/articles/cross-domain-requests-with-cors
  • 好的,我接受了您的回答,因为我的描述指向缺少 HTTPS 的事实。顺便问一下,我必须用 JavaScript 存储 cookie 还是浏览器在接收到它作为“Set-Cookie”参数时会自动保存它?
  • 它会自动为你创建 cookie - 因为 HttpOnly 也通过了 - If the HttpOnly flag (optional) is included in the HTTP response header, the cookie cannot be accessed through client side script (again if the browser supports this flag). owasp.org/index.php/HttpOnly
猜你喜欢
  • 2016-06-14
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多