Kir*_*eva 59 javascript cookies ajax jquery cross-domain
似乎已经在stackoverflow上讨论了类似的东西,但我找不到完全相同的东西.
我正在尝试使用CORS(跨源资源共享)发送Cookie,但它无法正常工作.
这是我的代码.
$.ajax(
{
type: "POST",
url: "http://example.com/api/getlist.json",
dataType: 'json',
xhrFields: {
withCredentials: true
},
crossDomain: true,
beforeSend: function(xhr) {
xhr.setRequestHeader("Cookie", "session=xxxyyyzzz");
},
success: function(){
alert('success');
},
error: function (xhr) {
alert(xhr.responseText);
}
}
);
Run Code Online (Sandbox Code Playgroud)
我没有在请求HEADER中看到这个cookie.
mon*_*sur 63
您无法通过JavaScript在CORS请求上设置或读取Cookie.虽然CORS允许跨源请求,但cookie仍然受浏览器的同源策略的约束,这意味着只有来自同一源的页面才能读/写cookie.withCredentials
仅表示远程主机设置的任何cookie都发送到该远程主机.您必须使用Set-Cookie
标头从远程服务器设置cookie .
abc*_*123 20
请注意,这并不能解决cookie共享过程,因为通常这是不好的做法.
您需要使用JSONP作为您的类型:
来自$ .ajax文档:跨域请求和dataType:"jsonp"请求不支持同步操作.
$.ajax(
{
type: "POST",
url: "http://example.com/api/getlist.json",
dataType: 'jsonp',
xhrFields: {
withCredentials: true
},
crossDomain: true,
beforeSend: function(xhr) {
xhr.setRequestHeader("Cookie", "session=xxxyyyzzz");
},
success: function(){
alert('success');
},
error: function (xhr) {
alert(xhr.responseText);
}
}
);
Run Code Online (Sandbox Code Playgroud)
mea*_*ppl 19
这个领域最近发生了许多变化,所以我认为一个新的答案会有所帮助。
要在请求期间让浏览器将 cookie 发送到另一个站点,必须满足以下条件:
Set-Cookie
目标站点的标题必须包含SameSite=None
和Secure
标签。如果Secure
未使用,SameSite
标题将被忽略。https
端点发出请求,这是Secure
标志的要求。XHRRequest
必须进行withCredentials=true
。如果使用$.ajax()
它是通过xhrFields
参数完成的(需要jQuery=1.5.1+
)Access-Control-Allow-Origin
与请求Origin
标头匹配的标头进行响应。(*
在这种情况下不会受到尊重)很多人找到了这篇文章的方法,试图针对远程端点进行本地开发,如果满足上述标准,这是可能的。
我有同样的问题.会话ID在cookie中发送,但由于请求是跨域的,因此浏览器的安全设置将阻止cookie被发送.
解决方案:在客户端(在浏览器中)生成会话ID,使用Javascript sessionStorage存储会话ID,然后将每个请求的会话ID发送到服务器.
我在这个问题上遇到了很多困难,周围的答案并不多.这是一篇详细介绍解决方案的文章:带有Session的Javascript跨域请求
归档时间: |
|
查看次数: |
94617 次 |
最近记录: |