cookie httponly ajax,为什么jquery的.ajax()方法没有发送我的会话cookie?

通过$.ajax()登录到站点后,我正在尝试向该站点发送第二个$.ajax()请求 - 但是当我检查使用FireBug发送的标头时,请求中不包含会话cookie 。

我究竟做错了什么?

#1楼

我遇到了同样的问题并做了一些检查我的脚本只是没有得到sessionid cookie。

我通过查看浏览器中的sessionid cookie值得出结论,我的框架(Django)默认使用HttpOnly传递sessionid cookie。 这意味着脚本无法访问sessionid值,因此不会将其与请求一起传递。 当很多东西使用需要访问限制的Ajax时,HttpOnly会成为默认值,这有点荒谬。

为了解决这个问题,我更改了一个设置(SESSION_COOKIE_HTTPONLY = False),但在其他情况下,它可能是cookie路径上的“HttpOnly”标志

#2楼

运用

xhrFields: { withCredentials:true }

作为我的jQuery ajax调用的一部分只是解决方案的一部分。 我还需要在我的资源的OPTIONS响应中返回标头:

Access-Control-Allow-Origin : http://www.wombling.com

Access-Control-Allow-Credentials : true

重要的是,OPTIONS调用的响应头中只有一个允许的“origin”而不是 “*”。 我通过从请求中读取原点并将其填充回响应来实现这一点 - 可能绕过限制的原始原因,但在我的用例中,安全性并不是最重要的。

#3楼

对这个问题已经有了很多好的回答,但是我认为澄清你希望发送会话cookie的情况可能会有所帮助,因为cookie域匹配,但是由于AJAX请求是被制作到不同的子域。 在这种情况下,我有一个分配给* .mydomain.com来域中的饼干,而我希望它被包含在一个AJAX请求different.mydomain.com”。默认情况下,该cookie不会发送。您不需要在会话cookie上禁用HTTPONLY来解决此问题。您只需要执行wombling建议( https://stackoverflow.com/a/23660618/545223 )并执行以下操作。

1)将以下内容添加到您的ajax请求中。

xhrFields: { withCredentials:true }

2)将以下内容添加到响应标头中,以获取不同子域中的资源。

Access-Control-Allow-Origin : http://original.mydomain.com

Access-Control-Allow-Credentials : true

#4楼

也许不是100%回答这个问题,但我偶然发现了这个线程,希望在ajax-从innovastudio编辑器的assetmanager发布文件上载时解决会话问题。 最终解决方案很简单:他们有一个flash-uploader。 禁用(设置

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。

#5楼

把它放在你的init函数中:

$.ajaxSetup({

xhrFields: {

withCredentials: true

}

});

它会工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值