在通过$.ajax()登录到一个网站后,我试图向该网站发送第二个$.ajax()请求-但当我检查使用FireBug发送的报头时,请求中没有会话cookie。
我做错了什么?
在通过$.ajax()登录到一个网站后,我试图向该网站发送第二个$.ajax()请求-但当我检查使用FireBug发送的报头时,请求中没有会话cookie。
我做错了什么?
当前回答
加上我的设想和解决方案,说不定能帮助到别人。我在使用RESTful api时遇到过类似的情况。我的承载HTML/Script/CSS文件的Web服务器和公开api的Application server托管在同一个域中。 然而,道路是不同的。
Web服务器- mydomain/webpages/abc.html
使用abc.js将cookie设置为mycookie
应用服务器- mydomain/webapis/servicename。
对哪个API调用
我期待在我的域名/webapis/servicename的cookie,并尝试读取它,但它没有被发送。 在阅读评论从答案,我检查在浏览器的开发工具 Mycookie的路径被设置为“/webpages”,因此在服务调用中不可用
mydomain webapis / xml数据
所以当设置cookie从jquery,这是我所做的-
$.cookie("mycookie","mayvalue",{**path:'/'**});
其他回答
AJAX调用仅在您调用的url与调用脚本在同一域中时发送cookie。
这可能是一个跨域问题。
也许你试图从www.domain-a.com调用一个url,而你的调用脚本在www.domain-b.com上(换句话说:你进行了跨域调用,在这种情况下浏览器不会发送任何cookie来保护你的隐私)。
在这种情况下,你的选择是:
Write a small proxy which resides on domain-b and forwards your requests to domain-a. Your browser will allow you to call the proxy because it's on the same server as the calling script.This proxy then can be configured by you to accept a cookie name and value parameter which it can send to domain-a. But for this to work you need to know the cookie's name and value your server on domain-a wants for authentication. If you're fetching JSON objects try to use a JSONP request instead. jQuery supports these. But you need to alter your service on domain-a so that it returns valid JSONP responds.
如果这能帮到你就好了。
加上我的设想和解决方案,说不定能帮助到别人。我在使用RESTful api时遇到过类似的情况。我的承载HTML/Script/CSS文件的Web服务器和公开api的Application server托管在同一个域中。 然而,道路是不同的。
Web服务器- mydomain/webpages/abc.html
使用abc.js将cookie设置为mycookie
应用服务器- mydomain/webapis/servicename。
对哪个API调用
我期待在我的域名/webapis/servicename的cookie,并尝试读取它,但它没有被发送。 在阅读评论从答案,我检查在浏览器的开发工具 Mycookie的路径被设置为“/webpages”,因此在服务调用中不可用
mydomain webapis / xml数据
所以当设置cookie从jquery,这是我所做的-
$.cookie("mycookie","mayvalue",{**path:'/'**});
把这个放在你的init函数中:
$.ajaxSetup({
xhrFields: {
withCredentials: true
}
});
它会起作用的。
如果您正在localhost或localhost上的端口(如localhost:8080)上进行开发,除了上面回答中描述的步骤外,还需要确保您没有在Set-Cookie报头中传递域值。 您不能在set - cookie报头中将域设置为localhost -这是不正确的-只需省略域即可。
查看cookie在本地主机与显式域和为什么asp.net不会在本地主机创建cookie ?
也许不能100%回答这个问题,但我无意中发现了这个帖子,希望解决一个会话问题,当ajax从innovastudio编辑器的资产管理器上传文件时。 最终解决方案很简单:他们有一个flash上传器。禁用(设置
var flashUpload = false;
在asset.php中),灯又开始闪烁。
由于这些问题很难调试,我发现在上传处理程序中放入以下内容将使你(在这种情况下是我)走上正确的轨道:
$sn=session_name();
error_log("session_name: $sn ");
if(isset($_GET[$sn])) error_log("session as GET param");
if(isset($_POST[$sn])) error_log("session as POST param");
if(isset($_COOKIE[$sn])) error_log("session as Cookie");
if(isset($PHPSESSID)) error_log("session as Global");
仔细查看日志,我很快发现了丢失的会话,其中没有发送cookie。