我正试图通过一个非常简单的解决方案来阻止对某些文件的访问。我正在将此代码添加到我要阻止的页面中,我知道该会话正在运行,因为我可以使用<?=$_SESSION['username']?>
回显记录的用户名,但以下代码段不会阻止该页面并重定向到登录名如果用户未登录。
session_start();
$user_check=$_SESSION['username'];
if(!isset($user_check))
{
header("Location: login.php");
}
答案 0 :(得分:1)
尝试一下
session_start();
$user_check=$_SESSION['username'];
if(!isset($user_check) || empty($user_check) || $user_check === " ")
{
header("Location: login.php");
}
您也可以直接这样做
if(!$_SESSION['username']){
//Redirect here
}
答案 1 :(得分:1)
isset
语言构造仅检查变量是否存在,并且不为NULL。
但是,如果未设置该值,则在从会话中检索它时已经收到警告。因此,如果$_SESSION['username']
为null
,则将触发重定向的唯一方法。
我无法确定它实际具有的值,因为您没有共享代码来决定是否有人登录,但是我将假定它是一个空字符串。这将解释为什么未触发条件的原因:空字符串不是null
。
除了建议使用id而不是名称之外,一种解决方案是使用empty
而不是isset
,或者更好的方法是检查该值是否等于空字符串。
另一方面,发送标题还不够。有了标题,大多数浏览器会在显示图像之前将用户重定向到login.php
,但是精明的用户可以禁用该重定向并仍然恢复内容。
要解决此问题,请将exit
附加到重定向代码。
答案 2 :(得分:0)
您已经为$user_check
分配了一个值,然后正在检查它是否已设置,因此您的情况将永远不会发生。也许您想检查数组值而不是变量的存在:
session_start();
if(!array_key_exists("username", $_SESSION))
{
header("Location: login.php");
}
答案 3 :(得分:0)
尝试一下
<?php
session_start();
$user_check=$_SESSION['username'];
if(!isset($_SESSION['username']))
{
header("location:login.php");
}
?>
答案 4 :(得分:0)
优良作法是检查会话是否也存在:
Return()