Ajax 使用 withCredentials 调用:true 不在请求中发送 cookie
Ajax call with withCredentials: true is not sending cookie in request
我的场景:
example.com 是用户正在访问的 django 页面。会话由服务器设置。现在,我在另一个名为 xyz.com 的域上有前端应用程序,现在,我需要在 example.com 上调用 API,所以我试图用 withCredentials: true
进行 ajax 调用。但它似乎没有在请求中发送 cookie 'sessionId'。
我已经看到一些堆栈溢出的答案,但建议的答案不起作用。 link1 link2 link3
我一直在尝试的是:
我的后端是用 Django 编写的,所以我尝试设置
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'
我正在使用 ajax 在 example.com
上进行 api 调用
jQuery.ajax({
url: "http://example.com/api/v1/admin/settings/",
dataType: 'json',
xhrFields: { withCredentials: true },
success: function(data) {
console.log(data);
}
});
我正在回答我的问题,以防万一有人遇到同样的情况。
我发现在 django 中 SESSION_COOKIE_SAMESITE
默认是 Lax
。
'Lax' (default): provides a balance between security and usability for websites that want to maintain user’s logged-in session after the user arrives from an external link.
In the GitHub scenario, the session cookie would be allowed when
following a regular link from an external website and be blocked in
CSRF-prone request methods (e.g. POST).
所以我不得不在设置中将其设置为 None 以允许浏览器发送 cookie。
SESSION_COOKIE_SAMESITE = None
参考文档here
我的场景:
example.com 是用户正在访问的 django 页面。会话由服务器设置。现在,我在另一个名为 xyz.com 的域上有前端应用程序,现在,我需要在 example.com 上调用 API,所以我试图用 withCredentials: true
进行 ajax 调用。但它似乎没有在请求中发送 cookie 'sessionId'。
我已经看到一些堆栈溢出的答案,但建议的答案不起作用。 link1 link2 link3
我一直在尝试的是: 我的后端是用 Django 编写的,所以我尝试设置
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'
我正在使用 ajax 在 example.com
上进行 api 调用jQuery.ajax({
url: "http://example.com/api/v1/admin/settings/",
dataType: 'json',
xhrFields: { withCredentials: true },
success: function(data) {
console.log(data);
}
});
我正在回答我的问题,以防万一有人遇到同样的情况。
我发现在 django 中 SESSION_COOKIE_SAMESITE
默认是 Lax
。
'Lax' (default): provides a balance between security and usability for websites that want to maintain user’s logged-in session after the user arrives from an external link.
In the GitHub scenario, the session cookie would be allowed when following a regular link from an external website and be blocked in CSRF-prone request methods (e.g. POST).
所以我不得不在设置中将其设置为 None 以允许浏览器发送 cookie。
SESSION_COOKIE_SAMESITE = None
参考文档here