【发布时间】:2012-02-09 12:43:37
【问题描述】:
这里的 IE8 上的 php 会话有一个大问题。我在网上做了一些研究,但没有匹配的示例(或者我无法将它们转化为我的场景)
我有一个网站,它广泛使用具有多个值的会话和一个保存在会话变量中的数组。在 chrome 和 firefox 上一切正常,但部分系统在 IE8 上中断,因为刷新后似乎只是丢失了会话信息。站点上的所有会话变量都经过相同的各种操作,包括标头(位置)重定向、apache url 重写等。
并非所有会话都不同。这是一个例子。当我登录并将信息保存到会话时(例如 $_SESSION['user']),它在整个站点中都可以正常工作,并且我没有被注销($_SESSION['user'] 没有丢失) .同时我分配了不同的会话变量,即使登录变量仍然存在,它们也可能在刷新时丢失
下面是一些不能在 IE8 上运行的代码
1) 我在页面上有一个链接,允许编辑您正在查看的页面,假设链接是 /edititem/ID
2) 点击它链接到一个 php 文件,该文件检索项目的数据并保存一个会话 var 数组。该数组中的一个字段决定了哪些 html 元素将显示在编辑表单上。设置会话变量后,有一个 header() 重定向
session_start();
$item = Item::getById($_GET["id"]);
$_SESSION["item"]["type"] = $item->type;
$_SESSION["item"]["title"] = $item->title;
$_SESSION["item"]["action"] = "edit";
header('location: /item_management');
3) 在重定向之后登陆 IE8 上的 /item_management 页面时,一切正常。当我刷新该页面时,上面设置的会话信息消失了
我读到了 IE8 上包含 _ 的 url 可能存在的问题。我在某个阶段更改了这些网址以使用 - 而不是 _ 但这没有帮助,所以我恢复了。 我还认为会话中的数组可能存在一些问题,但是代码中至少还有一个地方在 ajax 调用中调用时会丢失非数组会话(我有 $_SESSION["image"],做一个 ajax调用,读取用 ajax 调用的 php 中的 'image' var,它是空的)。
此外,用户会话变量在整个系统中都是完整的,即使其他值丢失了
所有与会话相关的东西都可以在 chrome/firefox 上完美运行
有什么想法吗?我将提供所需的任何代码
【问题讨论】:
-
您确定 IE 正在接受会话 cookie 吗?只是缺少那些变量,还是整个会话都是空的?
-
只是这些变量加上网站上的其他几个变量(例如我提到的 SESSION["image"] - 它在 ajax 调用中丢失了)......就像我写的那样,用户会话是完整的......否则我会被注销
-
做了更多测试,但我不确定发生了什么。会话 ID 肯定存在于整个站点中,包括 ajax 调用。我在测试中发现的非常奇怪的行为是,如果我有 SESSION["ad"][] 数组并为其分配了大约 10 个值,它会在重定向后保留所有这些值,但会丢失大多数(但不是全部!!)刷新后的这些值。我确保代码的其他部分不会在途中使用该会话 var 进行操作,并且没有这样的代码。每次创建新会话之前,我都会取消会话 ["ad"]
-
没有人可以帮忙吗?
-
抱歉,当问题是关于 IE 做错的事情时,我的注意力会随着时间的推移呈指数级下降。
标签: php ajax internet-explorer session