php - 在 AJAX 请求上清空 $_SESSION 超全局变量,但保留 session ID

标签 php session sessionid

我在使用 $_SESSION 时遇到问题AJAX 请求上的 superglobal。
session_start()在任何 session 编码之前调用函数。调用代码和 AJAX 响应代码中的 session ID 也相同(通过在两个脚本中回显 session_id() 进行测试)。 AJAX PHP 文件在同一个域中。一切都应该按照标准的定义工作,但是当我这样做时 print_r($_SESSION)在调用的 AJAX 脚本文件中,我得到 Arrray( )输出。

我撞到了砖墙......我不知道为什么这不起作用......

在 Chrome 和 Firefox 中都进行了检查。

有任何想法吗?

更新:

问题出在 $.ajax(...)要求!当我执行 AJAX 请求时,它知道正确的 session ID,以及 session_start()函数返回 TRUE (成功继续 session )但随后它重置了我的 $_SESSSION超全局!它清空它......我不知道为什么......

代码:

索引.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 是空的。在具有相同 session 的所有其他脚本中......我感到困惑......

最佳答案

这可能是因为如果你没有在 $_SESSION 中输入任何值.它会告诉你 array() 做 print_r($_SESSION)
尝试设置一个值 $_SESSION['user']='frankie'
然后做 print_r($_SESSION);session_id() 永远不会显示在 $_SESSION 数组中。

关于php - 在 AJAX 请求上清空 $_SESSION 超全局变量,但保留 session ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10967156/

相关文章:

javascript - 动态下拉列表 - 想要一种将输入存储在变量中的方法

PHP 创建复杂的 CSV 文件

php - 带有 mysql 池的 node.js(集群)的基准测试性能 : Lighttpd + PHP?

c# - 是否可以将 session ID 设置为我在 asp.net 中选择的值

php - Drupal 8 覆盖 session 管理

java - 即使在重新启动\重新安装服务后,jsessionid 也会被保存和使用

php - 在 Mysql 或缓存中存储数据与在 PHP 中计算

php - Joomla 缓存 PHP 中的 session token

php - 运输车的双向 session

c# - 如何从 SessionID 获取 Windows 用户名?