session_start的用法

时间:2018-09-12 19:26:26

标签: php

我正试图通过一个非常简单的解决方案来阻止对某些文件的访问。我正在将此代码添加到我要阻止的页面中,我知道该会话正在运行,因为我可以使用<?=$_SESSION['username']?>回显记录的用户名,但以下代码段不会阻止该页面并重定向到登录名如果用户未登录。

session_start();
$user_check=$_SESSION['username'];

if(!isset($user_check))
{
header("Location: login.php");
}

5 个答案:

答案 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()