-->

在AJAX请求空$ _SESSION超全局,但会话ID被保留(Empty $_SESSION sup

2019-10-16 20:15发布

我有问题$_SESSION在AJAX请求超全局。

session_start()函数的任何会话编码之前调用。 会话ID是也调用代码和AJAX响应代码(通过回测试的相同session_id()在这两个脚本)。 AJAX PHP文件是在同一个域。 一切都应该工作由标准定义的,但是当我做print_r($_SESSION)在被称为AJAX脚本文件,我得到Arrray( )输出。

我已经打了砖墙......我不知道这是为什么不工作...

无论是在Chrome和Firefox检查。

有任何想法吗?

更新:

问题是与$.ajax(...)的要求! 当我做AJAX请求它知道正确的会话ID,并session_start()函数返回TRUE (成功续会),但是它重置我的$_SESSSION超全局! 它会清空出来...我不知道为什么还...

码:

index.php文件:

<?php

session_start();

$_SESSION['Test']='O.K.';

echo("SESSION_ID: " . session_id());
echo("SESSION_SIZE:" . sizeof($_SESSION));

?>

... Standard HTML stuff and jQuery include ...

<script>
    $.ajax(
    {
        type: "POST",
        url: "AJAXTest.php",
        data: null,
        success: function(sData) { alert(sData); }
    });

</script>

AJAXTest.php:

<?php

session_start();

echo("SESSION_ID: " . session_id());
echo("SESSION_SIZE:" . sizeof($_SESSION));

?>

index.php的输出:

SESSION_ID: xxxxxxxxxxxxxxxxxxxxxxx
SESSION_SIZE: 1

报警输出:

SESSION_ID: xxxxxxxxxxxxxxxxxxxxxxx (right session id)
SESSION_SIZE: 0

而AJAX调用$ _SESSION后是空的。 跨越与同一会话中所有其他的脚本...我感到困惑...

Answer 1:

这可能是因为如果u没有把任何价值$_SESSION 。 它会告诉你做阵列() print_r($_SESSION)

尝试建立一个价值$_SESSION['user']='frankie'

然后做print_r($_SESSION);
SESSION_ID()是从来没有在$ _SESSION阵列所示。



Answer 2:

这可能是无法与AJAX的问题,但与会议本身。 现在,你只是测试$ _SESSION数组和会话ID,而不是会话存储本身。 尝试看看是否会话状态保持在几个非AJAX请求相同的。 例如,使用这样的:

$_SESSION['Test' . time()]='O.K.';

取而代之的是:

$_SESSION['Test']='O.K.';

当刷新页面,你SESSION_SIZE数量应该增加。 如果不增加,也许在php.ini会话存储参数是不正确的? 例如,问题,同时写入会议文件或问题进行内存缓存如果您使用的会话。

另外要确保没有其他请求页面,Ajax调用之间进行 - 也许有些所谓的脚本重置您的$ _SESSION数组?



Answer 3:

这个问题在我的自定义php.ini文件......显然,它搞砸了一些会话重要的设置(即使他们没有定义 - >更改)。

结果是,每次调用在session_start()将重置$ _SESSION超全局和清空,但留下什么困惑我在错误的方向扔了相同的会话ID。 直到我已经剥离下来到骨头的一切,很明显,错误不是在我的代码。

谢谢大家谁了兴趣。



文章来源: Empty $_SESSION superglobal on AJAX request, but session ID is preserved