奇怪的Cookie行为

时间:2013-07-16 20:10:29

标签: php cookies

在PHP中设置cookie有一个非常非常奇怪的问题。我基本上已经实现了一个登录功能(真的,真的是磨机的运行),如果数据库返回一行,在用他们的用户名和密码查询之后,这个想法是完全正常的。

我用来查询数据库的代码(似乎工作正常):

 $statement = $db->prepare("SELECT COUNT(*) FROM staff_accs WHERE username=:username AND password=:password");
    $statement->bindParam(':username', $username);
    $statement->bindParam(':password', $password);
    $statement->execute();

我用来测试是否返回行的代码。再次,似乎工作正常。

    if($statement->fetchColumn() === "1")
    {
        $cookieValue = sha1($username.$password);

        setcookie('admin', $cookieValue, 3600, '/');
        $_COOKIE['admin'] = $cookieValue;
        header("Location: ../admin.php");
    }
    else
    {
        // Re-direct to no permissions page.
        header("Location: ../noPermission.html");
    }

代码重定向到正确的页面,但是没有设置cookie。我已将路径设置为“/”以确保它是全局可用的(如果没有“/”则无法工作)。我也在调用方法后直接设置了值,以确保cookie被立即设置。

但是,当我到达admin.html页面时,我正在调用var_dump数组的$_COOKIE,这就是我所得到的:

array(0) { } 

所以看起来cookie没有被设置,尽管正确的代码块正在运行..

1 个答案:

答案 0 :(得分:3)

问题在于您致电setcookie。第三个参数需要时间戳,而不是持续时间。在这里,您的cookie即使在现有之前也会过期。 你应该试试 :

setcookie('admin', $cookieValue, time() + 3600, '/');