session: {
cookie: {
maxAge: 1000*60*60*1,
httpOnly: true, //set false if you want to change the cookie using JavaScipt
secure: true,
sameSite: 'none'
}
}
session: {
cookie: {
maxAge: 1000*60*60*1,
httpOnly: true, //set false if you want to change the cookie using JavaScipt
secure: false,
sameSite: 'lax'
}
}
4条答案
按热度按时间3htmauhk1#
如果你想做一些背景阅读,那么我建议你寻找CORS(跨源资源共享)的指南,特别是如何在使用CORS时设置cookie。
使用原始代码,您需要将其更改为
withCredentials
:在后台,这将在
XMLHttpRequest
上设置withCredentials
标志:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
然后你会在你的控制台上得到CORS错误。如果你通过这些错误你应该能够让它工作。这些错误将包括...
首先,服务器需要返回标头
Access-Control-Allow-Credentials: true
。这也适用于印前检查OPTIONS请求。第二,你目前使用的是
Access-Control-Allow-Origin: *
,但这是不允许使用凭据的请求的。这需要是Access-Control-Allow-Origin: http://www.example.com
。同样的,对于预检。此时,大多数浏览器都应该设置cookie(稍后将详细介绍浏览器的特性)。
若要将Cookie添加到后续请求中,您还需要在这些请求中设置
withCredentials: true
。还需要应用上面概述的其他标题更改。这些Cookie将不会包含在预检请求中,而只包含在主请求中。在浏览器的开发者工具中查看cookie并不完全简单。通常这些工具只显示与当前页面相同来源的cookie,不包括通过CORS请求设置的cookie。要查看这些cookie,您需要打开另一个浏览器选项卡,并将URL设置为与CORS请求相同来源的内容。但要小心,您需要选择一个不会设置cookie本身的URL,否则这并不能真正证明什么。
另一种检查设置了哪些Cookie的方法是发送另一个请求(使用
withCredentials
),然后查看发送了哪些Cookie。然后是特定于浏览器的问题...
在Safari中,通过CORS设置cookie真的很难。如果Safari是你的目标浏览器,那么我建议对此做一些进一步的研究。
其次,Chrome 80将对CORS Cookie的规则进行重大修改。
https://www.chromium.org/updates/same-site
在Chrome旧版本的控制台上,你已经看到了这方面的警告。简而言之,CORS cookie需要通过
https
提供,并设置Secure
和SameSite=None
指令。更新日期:
自从写了这个答案后,我已经为常见的CORS问题创建了一个FAQ。解释cookie使用的部分可以在www.example.com上找到https://cors-errors.info/faq#cdc8。
ifmq2ha22#
如果你使用Axios或Fetch -默认情况下它们不发送cookie。如果你去dav工具-(应用程序选项卡-〉cookie)中检查,你应该看到它们。这不是chrome问题,而是你试图将它们发送回来的方式,在fetch中你需要将
credentials: 'include',
添加到选项对象中,在axios中它是{withCredentials: true}
brccelvz3#
如果您正在使用express,则可能会将express-session用于您的会话cookie。
来自正式文件:https://www.npmjs.com/package/express-session
如果您使用的是
cross-site origin and https
安全连接:别忘了设置:
app.set('trust proxy', 1)
使用快速js否则在
localhost
中可以使用ffvjumwh4#
遇到了和OP一样的问题,结果我的问题很简单:
在使用
axios
时需要注意,如果使用下面的语法:axios.post()
个我做错了什么:
修复: