【发布时间】:2018-02-09 11:31:41
【问题描述】:
我有一个奇怪的问题是 php 会话变量在 ajax 访问的页面上不起作用。
服务器端代码:s2.php
<?php
session_start();
header("Access-Control-Allow-Origin: *");
echo '{"response":"'.$_SESSION["email"].'"}';
exit();
?>
客户端代码:index.php
$.ajax({
url: 'mysite.com/s2.php',
data: info,
error: function() {
console.log("broke :( ");
},
dataType: 'json',
success: function(data) {
console.log(data);
},
type: 'POST'
});
当我导航到 mysite.com/index.php 时,我在控制台中看到:{response: ""}。
当我导航到 mysite.com/s2.php 时,我看到 {response: "email@address"} 显示在浏览器中。
我只是不明白为什么 s2.php 可以正常访问会话,但在通过 ajax 调用运行时却不能。
另外,当我在我的家庭服务器上运行它时,一切似乎都很好。但是,当它在我妻子的 bluehost.com 服务器上运行时,它就会出现问题。这和他们的设置有关吗?
【问题讨论】:
-
也许是个愚蠢的问题,但是您是否在她的 bluehost 服务器上登录了该应用程序?会话不跨越服务器。
-
@Max 在这一点上,我认为我做了一些愚蠢的事情。但是,是的。 index.php在bluehost服务器上,就是原来设置
$_SESSTION["email"]的页面 -
您是否尝试过将 withCredentials 设置为 true?
-
@Musa 我假设您的意思是作为 ajax 调用的一部分?刚试过,没区别。
-
根据php.net/manual/en/function.session-start.php官方文档,你必须在你要使用会话的每一页中调用
session_start()方法,所以尝试在你的索引中调用session_start()。 php.