为什么这个会话总是返回true?

时间:2015-01-06 06:55:08

标签: php session if-statement isset

我的代码遇到了问题。 不知何故,检查会话的if语句总是返回true。即使在开始。我无法弄明白为什么......

这是我的登录页面。

<?php
session_start();
if(isset($_SESSION['username']))   //<-----This always returns true here for a strange reason.
{
}   
?>

这是我的登录控制器。

if($_POST)
{
    if(isset($_POST['submit']) AND $_POST['submit'] == "login")
    {
        $username = $_POST['username'];
        $password = $_POST['password'];
        try
        {
            include '../model/Login.php';
            $login = new Login($username, $password);

            if($login == TRUE)
            {
                session_start();
                $_SESSION['username'] = $username;
                header("Location:../index.php");
            }

        }
        catch (Exception $exc)
        {
            echo $exc->getMessage();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这总是返回true,因为即使$ _SESSION [&#39;用户名&#39;]为空(==&#39;&#39;),也会设置。

要取消设置,您可以使用:

unset($_SESSION['username']);

session_destroy();

如果您只想测试它是否为空,则有:

if(!empty($_SESSION['username'])){}//Will return false if $_SESSION['username'] == ''

甚至

if($_SESSION['username'] != ''){}//Will return true if $_SESSION['username'] has a value (other than '')

PS:empty()的优点是它还将测试变量isset()