2013-07-16 34 views
1

在PHP中设置cookie真的很奇怪。我基本上已经实现了一个登录函数(真的,真的运行的工厂),想法是,如果数据库返回一行,在用用户名和密码查询后,那就没事了。我使用查询数据库奇怪的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一个数组,这就是我得到:

​​

所以它出现在cookie不会被设置,尽管事实上正确的代码块正在运行..

+1

如果删除重定向,确实该cookie获取设置? –

+0

我刚测试过。事实上,确实如此。为什么会重新导致cookie不被存储? – christopher

+0

刷新admin.php并再次检查 – 2013-07-16 20:15:32

回答

3

问题出在您拨打setcookie。第三个参数需要一个时间戳,而不是一个持续时间。在这里,即使存在,您的cookie也会过期。 你应该尝试:

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

可爱的宝贝耶稣。我一直在PHP编程两年;我怎么会犯这样一个愚蠢的错误!?谢谢,我会在6分钟内接受。 :) – christopher

+0

@Chris:每个人都犯错误。如有疑问,检查文档是一个好习惯。 ;-) – Levans