【发布时间】:2017-09-11 14:14:02
【问题描述】:
我在获取简单会话数据值以在页面重定向后保持不变时遇到问题。一个函数检查通过 Post 发送的用户数据,如果它与数据库中的值匹配,它会将会话数据设置为这些值并重定向到另一个页面:
if ($login_ok) {
//set session data
$_SESSION ['online'] = 1;
$_SESSION ['userid'] = $id;
$_SESSION ['username'] = $name;
//redirect to new page
redirect('start.php');
}
在新页面代码中没有设置会话数据。简单测试返回 null 值,就好像没有设置会话数据:
echo 'Session Login Status: ' . $_SESSION ['online'];
echo 'Session UserID: ' . $_SESSION ['userid'];
echo 'Session Username: ' . $_SESSION ['username'];
用上面的 echo 语句替换重定向可以正常工作。在加载任何页面数据之前设置会话数据并激活重定向是否意味着未分配会话变量?
为确保活动会话始终可用,包含文件包含以下代码:
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
知道这里有什么问题吗?
非常感谢, 千瓦
【问题讨论】:
-
您是否在 start.php 进行了测试以评论您的包含并编写 session_start();无条件?
-
@Fran Cerezo 通过相同的包含文件在 start.php 中运行相同的代码,即: if (session_status() == PHP_SESSION_NONE) { session_start(); }
-
我的意思是做一个测试。无条件地创建 session_start(),或者创建一个 echo session_status()。也许 session_status 没有返回您所期望的。只是为了调试。
-
没有任何区别。我回显了会话状态,它返回为活动状态。我制作了一对带有相互链接的简单页面,创建了一个会话变量并回显了结果。他们都将变量报告为未设置。只有在页面中设置 var 并回显才能返回数据。感谢您的帮助,但我仍然对这个问题感到困惑,并检查了我的文件中是否有一些可能导致此问题的代码,但一无所获。
-
在本地主机上工作但不在远程服务器上工作很奇怪。您的主机是免费的还是付费的?如果付款,我会向管理员发送一张票。