php中ajax格式化,Ajax重置PHP会话

我知道this question has been asked before,所以我提前致歉,但是我已经多次超过了他的解决方案,在我看来,这不能解决会话重置问题.

我有一个简单的php页面,它输出用于调试的会话ID.像这样:

session_start();

echo session_id();

?>

然后,我有一个带有jQuery的简单HTML页面,该页面在该页面上执行ajax请求并记录输出.

$.post('http://localhost.api.mydomain/sid', {

some: 'data'

}, function(data,status) {

console.log(data);

});

Check your console.

如果我手动访问URL http://localhost.api.mydomain/sid,则输出不会更改,session_id()会保持不变,正如预期的那样.但是,如果刷新ajax页面,则每次刷新输出的session_id()都会更改.

我试过在php.ini文件中设置session.cookie_domain,但无济于事.对于这个问题,我深表歉意,但我根本找不到解决方法.

解决方法:

这是一个访问控制问题,而不是ajax问题.

当您直接从浏览器访问URL时,您正在从所访问的域中请求一个(会话)cookie.在这种情况下,使用ajax时,您是从不是您要访问的域的域请求cookie.

在api.example.com上的php API文件上,尝试执行此操作.

header('Access-Control-Allow-Origin: example.com');

header('Access-Control-Allow-Credentials: true');

然后在ajax请求文件上,像这样使用xhrFields参数.

$.ajax({

url: 'https://api.example.com',

xhrFields: { withCredentials: true },

success: function(data) {

console.log(data)

}

});

现在,只要您从来源example.com调用请求,Cookie就会像预期的那样运行.

标签:ajax,session-variables,session-cookies,session,php

来源: https://codeday.me/bug/20191109/2012048.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值