所以我之前遇到的事情并没有像我预期的那样表现,我无法弄清楚原因。我有一个类似于以下的PHP会话变量:
{
[quiz_id] => 1,
[1] => {object1},
[2] => {object2},
[3] => {object3}
}
我有一个AJAX调用转到一个页面,它只是在会话变量上调用print_r()
并返回它。问题是,返回数组只包含quiz_id
键而没有其他字段。发出AJAX请求的页面在AJAX调用之前的会话中也调用print_r()
,并按预期打印出来。
我改变了编号键的名称,之后一切按预期工作。我错过了某些会话或AJAX的细微差别吗?我无法想象为什么会议中只有一把钥匙可用。
答案 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数组。)