带有withCredentials的Ajax调用:true不在请求中发送cookie

时间:2018-10-29 19:36:47

标签: ajax django cors session-cookies django-cors-headers

我的情况: example.com 是用户正在访问的django页面。会话由服务器设置。现在,我在另一个名为 xyz.com 的域上有一个前端应用程序,现在,我需要在 example.com 上调用API,因此我尝试使用{ {1}}。但它似乎并未在请求中发送Cookie'sessionId'。

我已经看到了一些堆栈溢出的答案,但是建议的答案不起作用。 link1 link2 link3

我一直在尝试的是: 我的后端是用Django写的,所以我尝试设置

withCredentials: true

我正在使用Ajax在example.com上进行api调用

CORS_ALLOW_CREDENTIALS = True
    # Cross Origin Request Settings (CROS)
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
    'GET',
    'POST',
    'PUT',
    'PATCH',
    'DELETE',
    'OPTIONS'
)
CORS_ALLOW_HEADERS = (
    'x-requested-with',
    'content-type',
    'accept',
    'origin',
    'authorization',
    'x-csrftoken',
    'cache',
    'cookie',
)

CORS_ORIGIN_WHITELIST = [
    '*'
]

SESSION_COOKIE_HTTPONLY = False

SESSION_COOKIE_DOMAIN = 'example.com'

1 个答案:

答案 0 :(得分:1)

我正在回答我的问题,以便在有人遇到相同情况时提供帮助。

我发现在Django public boolean add(E e) { throw new UnsupportedOperationException(); } 中默认为SESSION_COOKIE_SAMESITE

  

“宽松”(默认):为希望在用户从外部链接到达后维持用户登录会话的网站提供安全性和可用性之间的平衡。

     

在GitHub场景中,当以下情况允许会话cookie   遵循来自外部网站的常规链接并被屏蔽   倾向于CSRF的请求方法(例如POST)。

所以我必须在设置中将其设置为“无”,以允许浏览器发送cookie。

Lax

引用文档here