3

我整天都在与这个问题作斗争。我已经阅读了许多 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 的正确程序是什么?

4

1 回答 1

1

不要从 URL 传递会话 ID。

http://en.wikipedia.org/wiki/Session_fixation

使用 cookie。例如,您可以通过存储创建者的 IP 地址对提供给您的会话 ID 执行尽力同源检查。Cookie 比简单的 URL 更难篡改。如果它们“消失”,则意味着您的用户清除了他们的 cookie,并且不希望您再跟踪他们的会话。

于 2013-05-11T15:38:55.847 回答