在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没有被设置,尽管正确的代码块正在运行..
答案 0 :(得分:3)
问题在于您致电setcookie
。第三个参数需要时间戳,而不是持续时间。在这里,您的cookie即使在现有之前也会过期。
你应该试试 :
setcookie('admin', $cookieValue, time() + 3600, '/');