【问题标题】:PHP session won't show all keys after AJAX callAJAX 调用后 PHP 会话不会显示所有键
【发布时间】:2015-04-16 21:41:58
【问题描述】:

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

{
    [quiz_id] => 1,

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

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

我更改了编号键的名称,之后一切正常。我在某处错过了会话​​或 AJAX 的一些细微差别吗?我无法想象为什么会话中只有一个键可用。

【问题讨论】:

  • 关于会话的 ajax 调用没有什么特别之处,它是一个遵循相同规则的 HTTP 请求 (xhr),我认为您有一个与其他事物相关的单一事件。除非你可以复制它
  • 只要会话 id 被发送(通常是通过 cookie),那么与标准浏览器负载相比,AJAX 请求的 http 请求没有什么不同。
  • 我编辑了我的答案以回答问题的“为什么”部分

标签: php jquery ajax session


【解决方案1】:

这与 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 数组)。

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 2018-12-05
    • 1970-01-01
    • 2014-07-11
    • 2021-06-27
    • 2020-03-22
    • 2011-08-17
    • 1970-01-01
    • 2013-06-06
    相关资源
    最近更新 更多