我失去了与PHP的会话

时间:2013-03-31 20:24:52

标签: php session

我正在处理的项目存在问题。我正在尝试使用PHP + Sessions编写一个简单的登录系统。但我失去了我的会话,我不知道为什么,代码:

的index.php

<?php
session_start();

if(!isset($_SESSION['logedin'] == True)){
    <form action = "login.php" method = "post" id="login-form" class = "login-form">
        <input type = "text" name = "username" maxlength = "100"/>
        <input type = "password" maxlength = "50" name = "password"/>

        <button type="submit">Sign in</button>
    </form>
}else{
   echo "Loged in.";
}
?>

的login.php

<?php
    session_start();

    $username = $_POST['username'];
    $password = $_POST['password'];

    if(!isset($_SESSION['logedin'] == True)){
        if($username == 'username' && $password == 'password'){
                    $_SESSION['logedin'] = True;
                    header("index.php"); // Loged in
        }
    }
?>

真正的代码不是这个,因为它放在这里太长了,但这是关于代码的简单简历......我正在失去理智,因为如果我打开一个会话到index.php,它工作,但如果我离开我的页面(在这种情况下,通过表单login.php),当我回到索引,会话只是消失......

我得说我不使用任何框架或其他东西,它只是一个简单的表单,都是用PHP完成的。

1 个答案:

答案 0 :(得分:2)

第一行的问题将是一个问题:

if(!isset($_SESSION['logedin'] == True)){

更改为:

if(!isset($_SESSION['logedin'])) {

为什么你在这种情况下做双重否定?而不是!isset == true,而是isset == false。这可能会给代码增加混乱,代码越直观(也越简单)就越好。

在你的login.php中你也有这一行:

if(!isset($_SESSION['logedin'] == True)){

你基本上说isset(true) == false应该总是返回false。因为$_SESSION['logedin'] == true是真的。将其更改为if (isset($_SESSION['logedin'])),如果您已登录,则为真。

让我们进一步打破这种状况,看看你在做什么

if (false == isset(
 $_SESSION['loged'] == true  // will be true if you're logged in
 )  // isset will return true, but you're expecting a false
)

你的确定总是会回归真实。 $ _SESSION ['logedin'] == true是返回true还是false,它将是“isset”。如果返回值为null或var不存在,则Isset将仅返回false。 “假”是一个值并且存在。那有意义吗?对不起,如果这令人困惑。基本上,不要在你的isset中使用条件! :)。将isset用作条件的一部分,但不要将它们传递给isset参数。