在AJAX调用之后,PHP会话不会显示所有键

时间:2015-04-16 21:41:58

标签: php jquery ajax session

所以我之前遇到的事情并没有像我预期的那样表现,我无法弄清楚原因。我有一个类似于以下的PHP会话变量:

{
    [quiz_id] => 1,

    [1] => {object1},
    [2] => {object2},
    [3] => {object3}
}

我有一个AJAX调用转到一个页面,它只是在会话变量上调用print_r()并返回它。问题是,返回数组只包含quiz_id键而没有其他字段。发出AJAX请求的页面在AJAX调用之前的会话中也调用print_r(),并按预期打印出来。

我改变了编号键的名称,之后一切按预期工作。我错过了某些会话或AJAX的细微差别吗?我无法想象为什么会议中只有一把钥匙可用。

1 个答案:

答案 0 :(得分:0)

它不是关于ajax请求。尝试通过创建打印会话的页面来重现它,然后设置会话。可能在您重新加载页面时,数字键/值对将永远不会出现在打印页上。

Php默认会话处理程序在内部不使用serialize()来存储数据。它使用的方法不能存储数字键或具有" |"的键。或"!"它们中的字符(实际上在键中有" |"会产生一个完全空的会话)。这可能会在以后的PHP版本中发生变化,但在5.4版本中就是这样。

您也可以使用自定义会话处理程序来使用数字键 请参阅此处获取一般信息:http://php.net/manual/en/session.customhandler.php
以下是它的核心部分:http://php.net/manual/en/function.session-set-save-handler.php(简单来说,read()和write()函数正在获取序列化/未序列化的$ _SESSION数组。)