Internet Explorer 中的 PHP session 数据更改

标签 php internet-explorer session

我已经定义了一个 session 来使用 PHP 存储 token ,如下所示:

$_SESSION['token'] = sha1(uniqid(mt_rand(), true));

当我想阅读这个 session 时,我在 Chrome 或 Firefox 中没有任何问题。但在 IE 中,它会在重新生成之前更改为其他内容。例如,如果我将其值存储在表单的隐藏字段中并像这样提交:

<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>" />

我将在下一页的 IE 中得到这个结果:

echo $_SESSION['token']; // shows 1b05fab5ec11f1d50713aea6e74f84727d29b4a3
echo $_POST['token']; // shows e8fac6d55b04d1752f37ecde953f7f08b112ccca

然而,如果我在创建后立即打印 $_SESSION['token'] 甚至在其创建页面结束时打印,它会准确无误地显示内容。

这个问题是为了什么?

编辑:
这是我的表格:

<form action="process/login.php" method="post">
   <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>" />
   <label>Email: </label><input type="text" name="email" />
   <div class="space"></div>
   <label>Password: </label><input type="password" name="password" />
   <div class="space"></div>
   <input type="submit" value="Login" class="button" />
</form>

最佳答案

由于 PHP 和 session 存储在服务器端,而 IE 显然是客户端,因此问题不在您的 session 代码中。

session 通常由 cookie( session cookie)或通过 POST/GET 变量进行跟踪。默认情况下,在 PHP 中,此值名为 PHPSESSID。

可能,在您的情况下,链接到服务器端 session 的 session cookie 或 POST/GET 变量在 IE 中无法正常运行。在 cookie 的情况下,它可能与 cookie 设置以及是否完全允许 ​​cookie 有关。如果是 POST/GET,则可能是您的 HTML 格式不正确,IE 不喜欢这种方式,但其他浏览器可以理解。

现在,一旦该值在 IE 中丢失,PHP 会在每个请求上为该浏览器分配一个新 session ,并在每个请求上重新生成 session token 。但是你的隐藏字段也记住了旧 token ......

如果您向我们展示更多代码(您可以编辑您的问题),我可以编辑我的答案以提供更多详细信息。

编辑 您可以先向我们展示有关 session 和 session cookie 的相关 php.ini 设置行。并仔细检查您的 IE cookie 设置。具体来说,我想知道您是否设置了 cookie_path,使 cookie 仅在同一目录中可用。

也许您甚至安装了 IE 安全设​​置或附加组件来阻止 cookie。因此,请尝试检查您的 IE 设置并禁用所有加载项并再次测试。

还要检查第一页(设置 session )和第二页(读取 session )是否具有完全相同的域名。

因此,例如第一页中的 www.yourdomain.com,第二页上不应该是 yourdomain.com(没有 www)或 www .yourdomain.com.(末尾有一个额外的点)。

关于Internet Explorer 中的 PHP session 数据更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22115825/

相关文章:

javascript - Window.open 在 Internet Explorer 中不起作用

jsp - Java 同一用户的多个 HttpSession ID

java - Cassandra Session vs Cluster 分享什么?

php - Apache/PHP 中 session 文件的位置

php - 如何根据帖子的日期和标题设置博客帖子的永久链接?

php - 将 mysql 结果输出为形式的数组(列名 => 列名的可能值)

jquery - IE Jquery click() 事件触发不起作用

internet-explorer - 我们如何为 IE 和 Edge 设置 Cypress?

php - 使用 .one() 和 .get()

php - Laravel 项目的 Azure Web App 错误 404