我有一个名为login.php的页面。login.php处理用户信息。如果在数据库中找到传递的用户信息,则启动新会话。然后将名称和密码添加到超级全局会话阵列中
if(correct_password($name, $password, $users, $users_size)) {
session_start();
$_SESSION["name"] = $name;
$_SESSION["password"] = $password;
header("Location: account.php");
验证后,用户被重定向到account.php。我想确保用户登录,即在他们可以访问account.php之前设置"名称"索引。为了做到这一点,我有以下代码
if(!isset($_SESSION["name"])) {
header("Location: index.php");
die;
}
假设此代码用于检查是否设置了"name"索引。如果没有设置,则意味着用户没有登录,因此应该返回到index.php。然而,即使用户登录,If似乎总是true。我甚至测试了
echo isset($_SESSION["name"]);
die;
简化事情。完成此操作后,屏幕上不会显示任何内容,这意味着isset评估为false。如果我尝试在account.php中打印全局会话数组,它会起作用。数据打印出来,显示名称字段填充了从login.php提交的数据。
我对isset有什么误解?或者我在别的地方搞砸了。
提前谢谢。
您还需要在检查该值的页面顶部设置session_start();
,而不仅仅是设置该值的位置。
session_start();
if(!isset($_SESSION["name"])) {
header("Location: index.php");
die;
}
这也适用于您:
if( false == isset( $_SESSION ) && false == isset( $_SESSION['name'] )
header("Location: index.php");
die;
}
将用户名和密码存储在cookie和会话中不是一个好主意试试这个会帮你解决
if (isset($_SESSION['name']) && null != $_SESSION['name']){
//name is exist don't forgot validate username against database
}
大家好,谢谢大家回答这个问题。你所有的答案都奏效了。我认为它们不起作用的原因是我忘记在用户登录后销毁会话。所以即使在注销后,名称索引仍然设置好。