【发布时间】:2013-05-11 01:19:47
【问题描述】:
我整天都在与这个问题作斗争。我已经阅读了许多 SO 和论坛帖子,其中很多其他人都遇到了同样的问题,而且这些帖子跨越了数年。
我的问题是我编写的后端系统的一部分,它允许对数据库数据进行非常基本的更改,可以添加、更新或删除新条目。相当标准的问题。为简单起见,每个函数、插入、更新、删除和数据库内容的整体视图都位于不同的页面上(insert.php、update.php、depete.php)。
当添加新条目、编辑或删除现有条目时,会发生重定向,该重定向会将用户带回视图,php 页面以显示更新的数据列表。问题是,重定向不起作用。 session 变量在重定向期间以某种方式被丢弃,由于我的代码,重定向用户回到登录页面。
这是我的代码:
if ($done || !isset($_GET['client_id'])) {
header('Location: http://website.com/admin/view.php');
exit;
}
非常感谢大家! 它检查以确保已发布更新的数据,如果一切正常,则重定向到 view.php。
但它不会,是的,我的页面都以必要的<?php session_start(); ?> 开头。所以在网上搜索了几个小时后,我在 PHP 手册中发现了一个有 9 年历史的条目,我觉得值得分享:
http://www.php.net/manual/en/ref.session.php#37555
海报中提到,“请注意绝对 URL 不会自动重写以包含 SID。”
他建议,“跳过 'http:' 就可以了。”所以我把它从我的代码中删除了:
if ($done || !isset($_GET['client_id'])) {
header('Location: view.php');
exit;
}
它成功了。这个话题让我们很多人头疼,我想分享它的价值。
但是,我也有一个问题,即允许写入包含 SID 的绝对 URL 的正确程序是什么?
【问题讨论】:
-
我认为使用 cookie 会好很多。
-
我没有。 Cookie 可能会消失或被篡改。
-
@JohnConde 有趣。您觉得上述方法是否合理,更重要的是,您会在您的网站上使用它吗?
-
这就是为什么你要清理用户可以输入的任何内容,并确保 cookie 不会过期。
-
您可以通过
session_id()获取当前会话ID。也许您可以使用它来手动构造绝对 URL?