网站登录和注销

时间:2011-11-11 16:29:54

标签: php session cookies mysqli

我的网站使用cookie登录和注销,它似乎工作正常,但我确信有一些我不知道的安全问题。我希望任何可以使这更安全的评论或见解。

登录:

if(isset($_REQUEST['email']) && isset($_REQUEST['password'])) {
    if ($result = $usersqli->query("SELECT * FROM users WHERE email='".$usersqli->real_escape_string($_POST['email'])."' AND password='".$usersqli->real_escape_string($_POST['password'])."'")) {
        if ($result->num_rows==1){
            $row = $result->fetch_object();
            $_SESSION["uid"]=$row->id;
            setcookie('email', $usersqli->real_escape_string($_REQUEST['email']), time()+60*60*24*365,'/');
            setcookie('password', md5($_REQUEST['password']), time()+60*60*24*365,'/');
            $usersqli->query("UPDATE users SET last_login=NOW() WHERE  email='".$usersqli->real_escape_string($_POST['email'])."' AND password='".$usersqli->real_escape_string($_POST['password'])."'"); 
            header( 'Location: index.php' ) ;
        }else{
            header( 'Location: index.php?show=login&err=Invalid login credentials' ) ;
        }
    }

}

退出:

    setcookie('email','', time() - 60000);
    setcookie('password', '', time() - 60000);
    session_destroy();
    header("Location: index.php");  

每页的标题:

if(!$_SESSION[uid] && $_REQUEST[show]!='logout'){
    if (isset($_COOKIE['email']) && isset($_COOKIE['password'])) {  
        if ($result = $usersqli->query("SELECT * FROM users WHERE email='".$usersqli->real_escape_string($_COOKIE['email'])."'")) {
            if ($result->num_rows==1){
                $row = $result->fetch_object();
                if(md5($usersqli->real_escape_string($row->password))==$_COOKIE['password']){
                    $_SESSION["uid"]=$row->id;          
                }
             }
         }
    }
}

2 个答案:

答案 0 :(得分:0)

不要将密码存储在cookie中 - 主要安全禁止。 关于如何执行此操作有lots of articles

答案 1 :(得分:0)

这两种身份验证机制都存在会话固定问题。

我没有看到明确的session_start()。

为什么要分开2个饼干?

虽然密码的md5哈希值意味着某人无法嗅探原始密码,但没有什么可以阻止他们嗅探密码的哈希值,这也可以让他们访问密码。通过SSL运行它不会有帮助 - 但在cookie上设置安全和仅http标志将解决后一个问题。