gpt4 book ai didi

php - Ajax 重置 PHP session

转载 作者:可可西里 更新时间:2023-11-01 01:12:31 25 4
gpt4 key购买 nike

我知道this question has been asked before所以我提前道歉,但我已经多次检查他的解决方案,但它并没有解决我的 session 重置问题。

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

<?php
session_start();
echo session_id();
?>

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$.post('http://localhost.api.mydomain/sid', {
some: 'data'
}, function(data,status) {
console.log(data);
});
</script>
</head>
<body>
Check your console.
</body>
</html>

如果我手动访问 url http://localhost.api.mydomain/sid,输出永远不会改变,session_id() 保持不变,正如预期的那样。但是,如果我刷新 ajax 页面,输出的 session_id() 会随着每次刷新而改变。

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

最佳答案

这是一个 Access-Control 问题,而不是 ajax 问题。

当您直接从浏览器访问 url 时,您是在从您正在访问的域中请求一个( session )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 就会按预期运行。

关于php - Ajax 重置 PHP session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49514987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com