在通过$.ajax()登录到一个网站后,我试图向该网站发送第二个$.ajax()请求-但当我检查使用FireBug发送的报头时,请求中没有会话cookie。
我做错了什么?
在通过$.ajax()登录到一个网站后,我试图向该网站发送第二个$.ajax()请求-但当我检查使用FireBug发送的报头时,请求中没有会话cookie。
我做错了什么?
当前回答
当您试图发送跨站点请求时发生此错误。 我怎么解决这个问题?
在nginx配置文件中添加
add_header Access-Control-Allow-Origin '*.domain.com'
add_header Access-Control-Allow-Credentials 'true';
在“domain.com”中,我试图发送ajax请求
$.ajax({
url: sub.domain.com,
xhrFields: {
withCredentials: true
}
});
其他回答
我有同样的问题,做一些检查我的脚本只是没有得到sessionid cookie。
通过查看浏览器中的sessionid cookie值,我发现我的框架(Django)将sessionid cookie以HttpOnly作为默认值传递。这意味着脚本不能访问sessionid值,因此不能将它与请求一起传递。有点荒谬的是,HttpOnly将是默认值,而很多东西都使用Ajax,这将需要访问限制。
为了解决这个问题,我改变了一个设置(SESSION_COOKIE_HTTPONLY=False),但在其他情况下,它可能是cookie路径上的“HttpOnly”标志
如果您正在localhost或localhost上的端口(如localhost:8080)上进行开发,除了上面回答中描述的步骤外,还需要确保您没有在Set-Cookie报头中传递域值。 您不能在set - cookie报头中将域设置为localhost -这是不正确的-只需省略域即可。
查看cookie在本地主机与显式域和为什么asp.net不会在本地主机创建cookie ?
只是我的2美分设置PHPSESSID cookie问题时,在本地主机和开发环境下。我对本地主机上的REST API端点进行AJAX调用。说它的地址是mysite。Localhost /api/member/login/(我的开发环境中的虚拟主机)。
当我在Postman上执行此请求时,一切正常,PHPSESSID与响应一起设置。 当我通过AJAX从Browsersync代理页面请求这个端点时(例如,从122.133.1.110:3000/test/api/login.php在我的浏览器地址行,看到域是不同的vs myste .localhost) PHPSESSID不会出现在cookie中。 当我直接从同一域的页面(即mysite.localhost/test/api/login.php)发出这个请求时,PHPSESSID设置得很好。
所以这是一个跨源源请求cookie问题,正如上面@flu回答中提到的那样
在尝试了其他解决方案后,仍然没有奏效,我发现了我的问题所在。我把contentType从“application/json”改为“text/plain”。
$.ajax(fullUrl, {
type: "GET",
contentType: "text/plain",
xhrFields: {
withCredentials: true
},
crossDomain: true
});
把这个放在你的init函数中:
$.ajaxSetup({
xhrFields: {
withCredentials: true
}
});
它会起作用的。