【问题标题】:CORS cookies not setting by browser , cookies are present in responseCORS cookie 不是由浏览器设置的,cookie 存在于响应中
【发布时间】:2023-03-24 00:54:02
【问题描述】:

我正在向 node.js 服务器的 API 端点发送 http 请求,此响应包含 cookie 并显示在 mozilla 调试器中。我通过 localhost.org 或我的虚拟主机(例如 myapp.example.com)发送此请求。 我也尝试了 AJAX XMLHTTPRequest 和 angular http 还为 AJAX 添加 xhrFields: {withCredentials: true} 凭据:'include' 用于获取等。

但是浏览器没有设置cookies,我尝试了2天,但这个问题还没有解决。

这是发送ajax请求的util函数

function sendServerRequest(url,method,data) {
return new Promise(function ( resolve ) {
    resolve($.ajax({
        url,
        method: method || 'GET',
        data,
        xhrFields: {withCredentials: true},
        crossDomain: true,
        success: function ( data ) {
            return data
        },
        error: function ( err ) {
            try {
                let responseStatus = err.responseJSON
                if ( responseStatus.status === sessionExpires ) {
                    sessionExpireCall(responseStatus.message)
                }
            } catch ( e ) {
                console.log('Failed to get response');
            }
        }
    }));
 })
}

原始响应

HTTP/1.1 200 OK
X-RateLimit-Limit: 13000
X-RateLimit-Remaining: 12996
Date: 2019-06-26 06:17:56
X-RateLimit-Reset: 1561533343
X-DNS-Prefetch-Control: off
X-Frame-Options: SAMEORIGIN
Strict-Transport-Security: max-age=15552000; includeSubDomains
X-Download-Options: noopen
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Access-Control-Allow-Origin: http://192.168.10.3
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type,             
Authorization
Access-Control-Allow-Credentials: true
set-cookie: true
set-cookie: driverId=c81e728d9d4c2f636f067f89cc14862c; Max-Age=3600;       
Domain=192.168.10.3; Path=/; Expires=Wed, 26 Jun 2019 07:17:56 GMT
set-cookie: driverName=kamran; Max-Age=3600; Domain=192.168.10.3; Path=/; 
Expires=Wed, 26 Jun 2019 07:17:56 GMT
set-cookie: connect.sid=s%3AX- syECgzpFEZhh4d5B_xfStUoYPrO3p1.%2FPj%2BMo7UnaZto6OGoP%2BOjdKvrJ%2F3Fm%2Bn1BJ%2FXU7Qdh8; Domain=192.168.10.3; Path=/; Expires=Wed, 26 Jun 2019 07:17:56 GMT; HttpOnly
Content-Type: application/json; charset=utf-8
Content-Length: 34
ETag: W/"22-tpsDmOyD3m/F84/JvyRCwDCbeY8"
Connection: keep-alive

{"detail":"verified","status":200}

请求原始文件

GET http://localhost:3000/driverboard/verifycode? 
mobile=923002222222&vcode=2609 HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Accept: */*
Origin: http://192.168.10.3
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
Referer: http://192.168.10.3/capptin-driverboard/verification.php
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: true

【问题讨论】:

  • 我认为问题在于 Cookie 域 .localhost.org 不等于浏览器页面中的域。你能检查一下吗?如果是这种情况,我会在之后发布详细的答案,说明原因等。
  • 不,我也尝试使用 localhost 和 IP (192.168.1.3) 当我从 localhost 打开网站并使用 localhost 请求我的服务器或从 (192.168.1.3) 请求打开 Web 时,一切正常到服务器 192.168.1.3
  • 此问题仅在从不同地址打开网页并请求不同 url 时发生,例如,如果网页从 192.168.1.3 打开并在 localhost 上请求,则它不存储 cookie,即使响应中存在 cookie如快照所示
  • 能否在问题中包含原始 HTTP 请求和响应?
  • 是的,当然@Mark

标签: node.js session cookies cross-domain session-cookies


【解决方案1】:

您可以使用“/”作为路径将 cookie 附加到您的响应中。

在 c# 核心中添加 cookie。将其附加到响应中:

context.Response.Cookies.Append(cookieNameAsString, cookieValue, new CookieOptions()
    {
        Expires = time,
         Path = "/",
     });

或在 javascript 中创建一个 cookie:

document.cookie = "cookieNameAsString='cookieValue'; max-age=time;";

【讨论】:

  • 确保您的到期日期在未来。你能展示你的代码吗?
  • 我已经发布了原始请求和响应,您可以看到所有必需的标头都存在,并且响应中也设置了 cookie
  • 我更新了我的问题并添加了ajax请求的代码
【解决方案2】:

CORS 与 cookie 无关,CORS 与 HTTP 标头有关。它允许进行跨域请求(从一个域到另一个域。例如从 myapp.example.com 到 google.com)。 Cookies 只发送到同一个域,例如从 myapp.example.com 你可以发送 cookie 到同一个域 .example.com

这里有文档https://developer.mozilla.org/ru/docs/Web/HTTP/CORS

【讨论】:

  • 感谢@Alexey 我明白了,但我想在浏览器中保存 cookie 我的请求是从 myapp.example.com 到 somedomain,com 我还在请求和响应中添加了所需的标头跨度>
猜你喜欢
  • 2020-10-07
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 2016-11-19
  • 2019-11-04
  • 2014-08-10
  • 2014-05-07
  • 1970-01-01
相关资源
最近更新 更多