Django 跨域请求时不携带cookie

在前后端分离项目中,后端Django 登录代码中使用session。

 request.session['username'] = user_obj.username
 request.session['user_id'] = user_obj.id
 request.session['is_login'] = True

后端服务器返回response header中有set-cookie属性。浏览器接收到set-cookie属性会自动把加入到cookie里面。

当同一台主机时,request header会携带cookie访问api。但是跨域请求时(已经解决跨域问题corsheaders)set-cookie没有生效,并且后续request header中也没有携带cookie。尝试修改以下跨域配置,依然没有用。

# 跨域增加忽略
CORS_ALLOW_CREDENTIALS = True  # 指明在跨域访问中,后端是否支持对cookie的操作
CORS_ORIGIN_ALLOW_ALL = True   # 允许所有主机请求你的API

# CORS_ORIGIN_WHITELIST = (   # 跨域请求白名单,为空时默认为全部
#     'http://192.168.8.189:8085', '*'
# )

后来发现,SameSite=Lax这个会禁止跨域请求时携带cookie,然而我们是需要携带cookie的。所以只要修改Django的配置,就可以啦。

# 会话cookie上SameSite标志的值。此标志防止在跨站点请求中发送cookie,从而防止CSRF攻击,并使某些窃取会话cookie的方法不可能实现。
SESSION_COOKIE_SAMESITE = None  # response header set-cookie:samesite=lax  Default: 'Lax'
CSRF_COOKIE_SAMESITE = None

 此时,set-cookie中SameSite=Lax没有了。前端就可以携带cookie跨域请求了。但是这样做可能不安全。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值