在PHP中设置/检查cookie的问题

时间:2011-06-20 09:59:44

标签: php cookies

我有一个小型基本网站,用户只能在登录时查看某些页面。只有1个用户名和密码,因为该网站仅供少数人使用,安全性不是主要问题。无论如何,当用户输入正确的用户名和密码并提交时,会在代码中设置cookie并重新加载页面。但它仍然显示内容,好像用户没有登录。当我再次按下sumbit按钮或只是单击到另一个页面时,内容显示正确(导航栏中的更多项目)。我无法找出为什么它不会第一次显示这些项目。

登录页面的顶部:

    if (isset($_POST['reg'])){
    if ($form_errors = validate_form()) {
        show_form($form_errors);
    } else {
        logon();
    }
} else {
   show_form();
}

页面内容(功能show_form)

    <?php
    if( isset($_COOKIE['logedon'])){
        echo '<p>You are now logged on</p>';
        }
    else{
          //shows form containing: <input type="hidden" name="reg" value="1"/>
    }
?>

,最后是logon()函数

function logon(){
$expire= 60 * 60 * 24 * 10000 + time(); 
setcookie('logedon', true, $expire); 
show_form();
}

因此设置了cookie,调用了show_form函数但仍然显示了表单,而不是回显“你现在登录”。当我再次切换页面或点击提交按钮时,会显示回显。为什么第一次不这样做?

请帮忙!

2 个答案:

答案 0 :(得分:4)

setcookie docs说:

  

直到明天才会看到Cookie   下一页加载的页面   cookie应该是可见的。去测试   如果成功设置了cookie,   在下次加载时检查cookie   Cookie过期前的页面。到期   时间是通过expire参数设置的。   调试存在的好方法   只需拨打电话即可享受cookies   的print_r($ _ COOKIE);

设置Cookie后,您应该重新加载页面,您可以使用header('location:http://someurl');die();

答案 1 :(得分:0)

使用标题功能完成登录后,只需手动刷新页面即可。设置cookie后,只能在下一页重新加载

中访问它

请参阅setcookie documentation