如何通过PHP跟踪登录状态?

时间:2009-08-09 05:51:05

标签: php cookies login

如何通过PHP跟踪登录状态?

我在每个页面中都包含以下页面以检查登录状态。我尝试通过cookie登录后识别用户。 但是,我还没有设法读取我的login_cookie或以任何方式使用它。

我操纵登录状态的代码 handle_login_status.php

<?php

    $dbconn = pg_connect("host=localhost port=5432 dbname=masi user=masi password=123");

    //1. read the first word in Cookie of the form 
        //"email@gmail.com,ca05106e445c15197f7213bc12648524
    //Then, store this word to $email 
    $cookie_tripped = explode(",", $_COOKIE['login_cookie']);   
    $email = $cookie_tripped[0];
    $result = pg_prepare($dbconn, "query1", 'SELECT passhash_md5 FROM users 
                         WHERE email = $1;');
    $result = pg_execute($dbconn, "query1", array($email));
    if(!$result) {
        exit;
    }

    // to take the passhash out of the cookie
    $passhash_md5_cookie = $cookie_tripped[1];
    if($result == $passhash_md5_cookie) {
        $result = pg_prepare($dbconn, "query7", "UPDATE users SET logged_in = $1
            WHERE email = $2;");
        $result = pg_execute($dbconn, "query7", array("true", $email));
        $logged_in = true;
    }
    else {
        $result = pg_execute($dbconn, "query7", array("false", $email));
        $logged_in = false;
    }

我在登录表单的处理程序中设置了cookie。

handle_login_form.php

的login_cookie声明
global $login_cookie;
$login_cookie = $_POST['email'] . ',' . md5($_POST['password']);

$result = pg_prepare($dbconn, "query3", 'SELECT passhash_md5 
    FROM users WHERE email = $1;');
$result = pg_execute($dbconn, "query3", array($_POST['email']));

while ($row = pg_fetch_row($result)) {
    $password_original = $row[0];
}

$login_cookie_original = $_POST['email'] . ',' . md5($password_original);

if ( $login_cookie_original == $login_cookie )
{   
    setcookie("login_cookie", $login_cookie);
    header("Location: /codes/index.php?ask_question");
    die("logged in");
} 

2 个答案:

答案 0 :(得分:5)

您甚至没有给我们足够的信息来正确调试......

  • $login_cookie_original定义在哪里?
  • $login_cookie定义在哪里?

如果没有这些信息,我们无法正确调试您的代码。您可以正确使用setcookie()来设置Cookie,然后使用$_COOKIE变量来读取它。

Sessions可以更轻松地处理登录情况。

你也一直在问很多关于PHP的基本问题,而你似乎并没有掌握语言是如何工作的。我建议您在下一个问题之前仔细阅读文档。

  

答案 1 :(得分:2)