【问题标题】:Session is passed, but $_SESSION is not会话已通过,但 $_SESSION 未通过
【发布时间】:2013-07-16 16:16:32
【问题描述】:

我正在尝试将图形对象从 jpgraph 从一页传递到另一页。要将对象传递到下一页,我将其保存为$_SESSION['graph']

为了将会话传递到下一页,我将其添加到 URL 中

echo '<a href="...../next.php?SSID='.session_id().'">Next</a>';

在 next.php 中,我获取 SID 并开始会话:

session_id($_GET['SSID']);
session_start();

但是当我尝试访问$_SESSION['graph'] 时,我收到错误Undefined index: graph,随后,当我尝试调用Stroke() 函数时它崩溃了。

我做错了什么?

【问题讨论】:

  • 确保您在分配图表的页面上调用 session_start
  • 为什么要将会话带到下一页?会话将自动继续。
  • 您确定SSID 设置正确吗?
  • 是的,会话已正确启动,我检查了两个页面上的session_id() 输出,它们是相同的
  • 不要将会话 ID 放入 url。考虑如果用户将该链接分享给其他人会发生什么。现在其他人可以劫持原始用户的会话。

标签: php html session


【解决方案1】:

默认行为是会话 ID 将存储在 cookie 中,而不是 GET 变量中。这由以下 php.ini 值控制:

session.use_cookies=1
session.use_only_cookies=1

两者都默认为1

因此,除非您已更改此设置,否则您将不需要该 GET 变量,因为会话 ID 存储在 cookie 中,该 cookie 将与请求一起自动传递。

这样做:

session_start(); // will get session id from cookie and resume the session
$graph = $_SESSION['graph'];

【讨论】:

  • @AndMim 您是否在生成链接的文档中启动会话?
  • 对此不能说太多。只有:如果你把所有事情都做对了,那么我的答案中的代码就可以解决问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多