Cookie在页面之间丢失

时间:2015-12-12 17:26:13

标签: php cookies

我遇到了一个问题,即在一个类的一个方法中设置了cookie,而在另一个方法中,没有定义相同的cookie。为了更清楚,这是第一种方法的代码:

public function checklogpass($name,$psw) 
{

    try {
        $pdo = new PDO('mysql:host=localhost;dbname=informal','vad','6989');

        $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

        $pdo->exec('SET NAMES "utf8"');
    }
    catch(PDOException $e) {

        echo $e->getMessage();
    }

    $sql = 'SELECT login,password FROM users WHERE login = :name AND password = :psw';

    $stmt = $pdo->prepare($sql);

    $stmt->bindValue(':name',$name);
    $stmt->bindValue(':psw',$psw);
    $stmt->execute();

    $row = $stmt->fetch();

    if (isset($name) && isset($psw)) {

        if($name == $row['login'] && $psw == $row['password']) {

            setcookie("log",$name,time()+3600);
            header('Location: /OpenS/app/auth/checkin.php');

        } else {

            $_SESSION['errors'] = 'Failed login or password';
            header('Location: /OpenS/app/views/form.php');
        }
    }

} 

另一个类的另一种方法:

public function getUser()
{
    if (isset($_COOKIE["log"])){

        return $_COOKIE["log"];

        header('Location: /OpenS/app/views/home.php');

    } else {

         $_SESSION['notify'] = 'You are not logged in';

         header('Location: /OpenS/app/views/home.php');
    }
}

当我输入错误的用户名或密码时,脚本会正确地告诉我“登录或密码失败”。但是,当我输入正确的用户名和密码时,cookie已设置,重定向到主页,但在主页上会显示“您尚未登录”。

我通过将信息放在会话中解决了这个问题,但我认为这不是正确的解决方案。我怎样才能更好地做到这一点?

1 个答案:

答案 0 :(得分:0)

您当前的方法根本就是错误的。通过设置cookie" log"使用等于用户名的值,您可以自由地打开任何人,无需任何登录凭据......

Cookie是存储在客户端计算机上的一段数据。客户端计算机上的所有数据都可以随意更改。除其他外,它们可以只更改cookie的值,并以管理员身份登录。

那么,你如何解决这个问题呢?您将信息放在会话中,就像您已经做过的那样。会话cookie相当安全,因为很难找到与其他人的会话冲突的cookie值。会话变量永远不会发送给用户,而是存储在服务器上。只有会话cookie在浏览器和客户端之间来回发送。