【发布时间】:2014-02-23 14:30:09
【问题描述】:
我正在尝试创建登录流程,但在设置会话变量时遇到问题,
当用户点击页面时,我有一个 php 文档检查用户是否已登录,或者是否设置了 cookie 以重新登录,
要检查的代码(简化)是:
<?php
session_start();
if (isset($_SESSION['uid'])) {
//logged in experience here
}
else {
if (isset($_COOKIE['uname']) && isset($_COOKIE['key'])) {
//query database to ensure valid credentials
if (<--valid-->){
$_SESSION['uid'] = $uid; //set session variables
$_SESSION['fname'] = $fname;
var_dump($_SESSION); //check to make sure variables set, this works
//logged in experience
}
else {
echo "error loggin in";
}
}
}
?>
在第一次点击页面时,如果没有设置会话,它会转到 cookie,然后设置会话变量。在索引页面上,我 print_r 会话变量,我得到了所需的结果,在离开页面然后使用同一子域中的文本链接返回后,再次调用 php,这次设置了 $_SESSION['uid']但是它返回为空白,如 print_r 所示。
所以问题是,在导航到当前不接触会话的页面然后返回变量设置为空白之间的某个地方。我还通过访问确实触及会话变量的页面对此进行了测试,它只是将会话变量设置为我要跟踪的 uniqid,并且可以在索引页面上调用该变量。另外,在索引页的顶部也会调用 session_start(),
索引上的php很简单
<?php
session_start();
require 'login_check.php';
print_r($_SESSION);
?>
【问题讨论】:
-
cookie 是在哪里/如何创建的?如果没有创建 cookie,则不会设置会话,进而不会在下一页上显示会话 ID/名称。我在您的问题中没有看到 cookie 代码。我所看到的都是 cookie 相关的,正在检查是否设置了一个。
-
剩下的代码在哪里?
-
这只是为了检查用户是否已经登录或返回用户,cookie是在登录事件中设置的
-
只是为了确保您在用户访问的每个页面的开头都有
session_start();? -
那么,您正在检查是否设置了两个 cookie,为什么要设置两个? 我讨厌晚上打高尔夫球,球永远不会落入(右)洞。