重定向后,会话变量消失

时间:2013-05-11 01:19:47

标签: php session redirect

我整天都在和这个问题作斗争。我阅读过很多SO和论坛帖子,其中有很多人都有同样的问题,这些帖子跨越了多年。

我的问题是我编写的后端系统的一部分,它允许对数据库数据进行非常基本的更改,可以添加,更新或删除新条目。非常标准的问题。为简单起见,每个函数,插入,更新,删除和数据库内容的整体视图都在不同的页面上(insert.php,update.php,depete.php)。

当添加新条目,编辑或删除现有条目时,接下来的重定向将使用户返回到视图,php页面显示更新的数据列表。问题是,重定向无效。会话变量在重定向期间以某种方式被丢弃,由于我的代码,它将用户扔回登录页面。

这是我的代码:

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的正确程序是什么?

1 个答案:

答案 0 :(得分:1)

请勿从网址传递会话ID。

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

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