Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php AJAX请求上的空$\u会话超全局,但保留会话ID_Php_Session_Sessionid - Fatal编程技术网

Php AJAX请求上的空$\u会话超全局,但保留会话ID

Php AJAX请求上的空$\u会话超全局,但保留会话ID,php,session,sessionid,Php,Session,Sessionid,我在AJAX请求的$\u会话superglobal中遇到问题 session\u start()函数在任何会话编码之前调用。调用代码和AJAX响应代码中的会话ID也是相同的(通过在两个脚本中回显Session\u ID()进行测试)。AJAX PHP文件位于同一个域中。一切都应该按照标准的定义工作,但是当我在被调用的AJAX脚本文件中执行print\r($\u SESSION)时,我会得到Arrray()输出 我撞到了砖墙。。。我不知道为什么这不起作用 在Chrome和Firefox中都进行了检

我在AJAX请求的
$\u会话
superglobal中遇到问题

session\u start()
函数在任何会话编码之前调用。调用代码和AJAX响应代码中的会话ID也是相同的(通过在两个脚本中回显
Session\u ID()
进行测试)。AJAX PHP文件位于同一个域中。一切都应该按照标准的定义工作,但是当我在被调用的AJAX脚本文件中执行
print\r($\u SESSION)
时,我会得到
Arrray()
输出

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

在Chrome和Firefox中都进行了检查

有什么想法吗

更新:

问题在于
$。ajax(…)
请求!当我执行AJAX请求时,它知道正确的会话ID,
session\u start()
函数返回
TRUE
(成功地继续了会话),但随后它会重置我的
$\session
超全局!它把它倒空了。。。我还不知道为什么

代码:

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>
警报输出:

SESSION_ID: xxxxxxxxxxxxxxxxxxxxxxx (right session id)
SESSION_SIZE: 0

在AJAX调用之后,$\u会话为空。在具有相同会话的所有其他脚本中。。。我很困惑…

这可能是因为如果你没有在会话中输入任何值。在执行
print\r($\u SESSION)


尝试设置一个值
$\u会话['user']='frankie'


然后执行
print\r($\u会话)

会话id()从未显示在$\u会话数组中

这可能不是AJAX的问题,而是会话本身的问题。现在您只需要测试$\u会话数组和会话id,而不是会话存储本身。尝试查看会话状态在几个非AJAX请求中是否保持相同。例如,使用以下命令:

$_SESSION['Test' . time()]='O.K.';
与此相反:

$_SESSION['Test']='O.K.';
刷新页面时,会话大小计数应增加。如果不增加,可能php.ini中的会话存储参数不正确?例如,将会话写入文件时出现问题,或者在会话中使用memcache时出现问题


还要确保页面和ajax调用之间没有其他请求-可能一些被调用的脚本会重置您的$\u会话数组?

问题出在我的自定义php.ini文件中。。。它显然破坏了一些重要的会话设置(即使它们没有定义->更改)

结果是,每次调用session_start()都会重置$_sessionsuperglobal并清空它,但会留下相同的会话ID,这让我感到困惑,并朝错误的方向抛出。在我把所有的东西都剥去之前,很明显错误并不在我的代码中


感谢所有感兴趣的人。

会话开始()之前,您是否有任何代码?
?您的浏览器中是否启用了cookie?请使用var\u dump()检查它。您可能已经输入了一些重要的代码。cookie已启用,否则不会设置会话id:)在会话开始()之前没有代码,并且会话已成功建立,othervise session_id()函数将返回空字符串。来自主脚本的会话ID和称为脚本的AJAX的会话ID是相同的。(用echo测试,正如我在原始问题中所写的)我不是新手Chaitanya:)当然我用字符串测试过:)$\u SESSION[“test”]=“test”;是我的测试会话变量。我现在已经创建了完全独立的代码来测试PHP设置,使用这些代码,一切都正常工作。。。所以,这个错误一定与我的代码有关。问题是我的代码复杂、冗长且难以调试。感谢大家的投入。我会在找到解决方案后发布。
$_SESSION['Test' . time()]='O.K.';
$_SESSION['Test']='O.K.';