【问题标题】:Session variable disappears after Redirect重定向后会话变量消失
【发布时间】: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?

标签: php session redirect


【解决方案1】:

不要从 URL 传递会话 ID。

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

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

【讨论】:

  • 非常感谢您的提示!在重新阅读我自己的声明时,“......允许写入包含 SID 的绝对 URL 的正确程序是什么......”我可以看到我在编写它时的想法是多么少。我需要更好地说明事情,因为我想做的是能够在重定向中使用绝对 URL 并通过某种方式传递 SID(不是通过 URL,因为我看到很多人提到从不这样做)。所以接下来我要去研究 cookie 并阅读你发布的那篇精彩的文章。非常感谢!
猜你喜欢
  • 2023-03-29
  • 2010-12-24
  • 2014-08-14
  • 2012-07-08
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多