我整天都在和这个问题作斗争。我读过许多 SO 和论坛帖子,其中许多其他人也有同样的问题,而且这些帖子跨越了数年。
我的问题是我编写的后端系统的一部分,该系统允许对数据库数据进行非常基本的更改,可以添加、更新或删除新条目。相当标准的问题。为简单起见,每个函数、插入、更新、删除和数据库内容的整体 View 都在单独的页面上(insert.php、update.php、depete.php)。
当添加新条目、编辑或删除现有条目时,重定向将把用户带回 View ,php 页面以显示更新的数据列表。问题是,重定向不起作用。 session 变量在重定向期间以某种方式被丢弃,由于我的代码,将用户扔回登录页面。
这是我的代码:
if ($done || !isset($_GET['client_id'])) {
header('Location: http://website.com/admin/view.php');
exit;
}
非常感谢大家! 它检查以确保已发布更新的数据,如果一切正常,则重定向到 view.php。
但它不会,是的,我的页面都以必要的 <?php session_start(); ?>
开头.因此,在网上搜索了几个小时之后,我在 PHP 手册中发现了一个九年前的条目,我认为它值得分享:
http://www.php.net/manual/en/ref.session.php#37555
发帖人在其中提到,“请注意绝对 URL 不会自动重写以包含 SID。”
他建议说,“跳过‘http:’就可以了。”所以我从我的代码中删除了它:
if ($done || !isset($_GET['client_id'])) {
header('Location: view.php');
exit;
}
它奏效了。这个话题一直让我们很多人头疼,我想分享它的值(value)。
但是,我也有一个问题,那就是,允许写入包含 SID 的绝对 URL 的正确程序是什么?
最佳答案
请勿从 URL 传递 session ID。
http://en.wikipedia.org/wiki/Session_fixation
使用 cookie。您可以通过存储创建者的 IP 地址等方式对提供给您的 session ID 执行尽力而为的同源检查。 Cookie 比简单的 URL 更难篡改。如果它们“消失”,则意味着您的用户清除了他们的 cookie,并且不希望您再跟踪他们的 session 。
关于php - 重定向后 session 变量消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16492835/