1

在 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页面时,我正在调用数组的 a var_dump$_COOKIE这就是我得到的:

array(0) { } 

因此,尽管正确的代码块正在运行,但似乎没有设置 cookie。

4

1 回答 1

3

问题出在您对setcookie. 第三个参数需要时间戳,而不是持续时间。在这里,您的 cookie 甚至在存在之前就过期了。你应该试试 :

setcookie('admin', $cookieValue, time() + 3600, '/');
于 2013-07-16T20:16:27.390 回答