【发布时间】:2014-03-01 14:50:12
【问题描述】:
我已经定义了一个使用 PHP 存储令牌的会话,如下所示:
$_SESSION['token'] = sha1(uniqid(mt_rand(), true));
当我想阅读这个会话时,我在 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>
【问题讨论】:
-
您是否检查过 IE 上是否启用了 cookie? =/
-
向我们展示将令牌放入 POST 数据中的代码
-
您是否尝试将 $_SESSION['token'] 命名为其他名称?例如尝试 $_SESSION['my_app_token']。这样您就可以确保与其他应用程序/脚本没有冲突。
-
页面是否在 iframe 内?
标签: php internet-explorer session