2013-10-11 45 views
1

我想为我的网站过程添加更多的安全性,以便试图绕过登录页面的外部用户将运行到!isset,该设置检查是否设置了登录$ _SESSION变量,如果不是,则会破坏会话并重定向回主登录页面。!isset返回FALSE和有效变量?

我的问题是!isset函数返回一个FALSE值,从而破坏会话和重定向,但是当我用print_r测试该页面上的变量时,它们被识别并存储。

我的代码(我削除变量):

<?php 

session_start(); 

if(!isset($_SESSION['xxx'], $_SESSION['xxx'])) 
    { echo "Login successfull"; } 

    else 

    { session_destroy(); 
    header("location:main_login.php"); 
    } 

?> 

如果有人可以解释我我做错了什么(甚至不一定是给我在纸上的答案,我想了解和学习以来我是一名新秀),那将是惊人的。我试图环顾四周,但无法真正找到我正在寻找的东西。提前谢谢了!

回答

2
if(!isset($_SESSION['xxx'], $_SESSION['xxx'])) 

这是检查会话是否not集,注意!符号。因此,当会话变量未设置时,您正在呼应Login Successfull

你应该有它类似如下:

if(isset($_SESSION['xxx'], $_SESSION['xxx'])) 
{ 
    echo "Login successfull"; 
} 
else 
{ 
    session_destroy(); 
    header("location:main_login.php"); 
} 
+0

非常感谢你。我不知道'!'符号表示它检查NOT SET变量。 –

+0

欢迎您。一般来说'!'的意思不是。例如'!true'将等同于'false'。 – Paddyd

2
isset($_SESSION['xxx'], $_SESSION['xxx']) 

如果不是所有的变量都设置,将返回false。

所以你的条件必须如下。

if(isset($_SESSION['xxx'], $_SESSION['xxx']))