PHP:会话变量丢失,会话ID更改(使用Ajax)

3

我对PHP还不熟悉,使用session时遇到了问题。我在Javascript中使用AJAX调用一个登录php脚本,在那里我想创建会话并设置一个值。

<?php
ini_set('display_errors', 1);
session_start();
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');

$_SESSION['username'] = "username";

?>

我会把响应处理的任务交给JavaScript,并使用AJAX再次调用另一个PHP脚本。 另一个文件如下所示:
<?php
ini_set('display_errors', 1);
session_start();
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');

$username = $_SESSION['username'];
?>

但是用户名为空。如果我在两个文件中请求会话ID,那么会话ID就会改变。第一个文件发送一个包含PHPSESSID的响应Cookie。我需要在调用第二个脚本的AJAX调用中使用这个ID吗?
更新:如请求的AJAX代码所示:
function callAjax(url, data, successCB, errorCB) {
    $.ajax({
            url: url,
            type: 'post',
            data: data,
            success: successCB,
            error: errorCB
    });
}

称之为:
callAjax(GET_TEMPLATES_PHP_URL, {}, onGetTemplateSuccess, onRessourceRetrievalError);

我查看了类似的SO问题中的答案,但它们并没有帮助到我。有什么想法吗?提前感谢。

1
请检查会话cookie设置。例如,如果您的会话设置为“/ foo”子目录,并且您的ajax代码位于“/ bar”中,则cookie将不可见。 - Marc B
展示一下 Ajax/JS。我不认为这会失败。然而,$_SESSION['username'] = "username"; 应该改为 $_SESSION['username'] = $username; - Funk Forty Niner
@JayBlanchard 不应该有影响。错误报告不算输出。早上好,Ralph - Funk Forty Niner
1
啊啊啊啊…看来我之前遇到过这个问题@Fred-ii-,但我刚刚测试了一下,你是对的。早上好Sam - Jay Blanchard
1
@n-dru,感谢您的帖子。我现在明白了。 - Androidicus
显示剩余5条评论
1个回答

2
感谢用户n-dru的帮助,我解决了问题。我从“http://www.myside.com/index.html”中调用脚本,像这样“http://myside.com/script.php”。由于脚本调用中缺少“www”,它是对不同来源的调用。所以cookie丢失了。我添加了“www”,从php中删除了“Allow Orgin”内容,现在它可以工作了。
谢谢大家!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接