axios 是一个基于 promise 的 HTTP 库,可以用于浏览器和 node.js 中发送请求。SameSite 是一个用于控制 cookie 在跨站请求中如何发送的属性,它有三个可能的值:Strict、Lax 和 None。Secure 是一个用于指示 cookie 只能在 HTTPS 连接上发送的属性。
如果想要在跨站请求中使用 axios 发送 cookie,需要在服务器端设置 cookie 的 SameSite 为 None,并且设置 Secure 为 true。这样,在 HTTPS 连接上,浏览器才会将 cookie 发送给服务器。同时需要在客户端的 axios 请求中设置 withCredentials 为 true,以允许携带 cookie。
以C#为例:
// 添加Session支持
builder.Services.AddSession(options =>
options.IdleTimeout = TimeSpan.FromMinutes(1);
options.Cookie.IsEssential = true;
options.Cookie.SameSite = SameSiteMode.None; // 默认的SameSite=Lax,使用域名(非IP)访问时无法设置Cookie,会导致Session失效
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest; // 使用SameSite=None必需的属性
1、vue开发后台管理项目,登录后,请求数据每次session都不一致,后台返回未登录,处理方法打开main.js设置:
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
require('es6-promise')
在请求或响应被 then 或 catch 处理前拦截它们。比如说如果网络断开了话,可以在请求发送之前判断,当然也可以在请求中判断,但这样更方便。
// 添加请求拦截器
axios.interceptors.request.use(
function (config) {
// 在发送请求之前做些什么
if (window.navigator.onLine) { // 这里是判断网络是否断开
return request
} else {
Cookie的属性SameSite如果不配置或者配置为none,则存在CSRF风险。
SameSite的取值可以为:
(1)unset(默认)。这种情况浏览器可能会采用自己的策略。
(2)none。存在CSRF风险。
(2)lax。大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。
(3)strict。完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带
转自:Springboot应用中设置Cookie的SameSite属性 - SpringBoot中文社区 - 博客园
Cookie除了key和value以外有几个属性。
httpOnly是否允许js读取cookie
secure是否仅仅在https的链接下,才提交cookie
domaincookie提交的域
pathcookie提交的path
maxAgecookie存活时间
sameSite同站策略,枚举值:StrictLaxNone
其他的都很熟悉了,最后一个是 Chro...
前端发送axios请求时我们django给予响应时若想携带cookie,必须要设置跨域,否则会杯浏览器拦截。
新版本的Chrome浏览器会有一个SameSite属性,他有三个值:Strict、Lax、none。
Strict较为严格,不允许跨域携带cookie,Lax稍微宽松允许一部分跨域cookie,none则直接允许跨域cookie。
这里我们要设置none才行,默认就是Lax。但是设置none时还需要告诉浏览器我这个cookie是安全的,不然也会被拦截的。
所以最终django设置:
要在settin
CSDN-Ada助手:
JS判断对象是否相等
CSDN-Ada助手: