2013-05-11 170 views
3

我一整天都在为这个问题而战。我已经阅读了许多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手册九年旧条目来了,我觉得是值得分享:

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?

+0

我认为它更好地使用cookie。 – jpaugh 2013-05-11 01:22:09

+0

我不知道。饼干可以消失或被篡改。 – 2013-05-11 01:28:41

+0

@JohnConde有趣。你觉得上述方法是否合理,更重要的是,你会在你的网站上使用它吗? – wordman 2013-05-11 01:32:07

回答

1

不要从URL传入会话ID。

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

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

+0

非常感谢您的提示!在重新阅读我自己的陈述时,'......适当的过程是什么才能允许写入包含SID的绝对URL ......“我可以看到,当我写这些时,我的想法有多少。我需要更好地阐明事情,因为我想要做的就是能够在重定向中使用绝对URL并通过某种方式传递SID(而不是通过URL,因为我曾经看到很多人提到永远不会这样做)。因此,我下一步要研究cookie,并阅读您发布的那篇令人惊叹的文章。非常感谢! – wordman 2013-05-13 23:40:26