php cookie在第一次阅读时不起作用

时间:2012-05-06 06:00:33

标签: php cookies

我是PHP的初学者,正在学习使用cookie进行登录。请问任何机构请检查我的代码,看看我的问题是什么,或者让我如何解决这个问题。

当我第一次打开页面时,cookie将无效。当我重复打开该链接时,它将起作用。但是,在使用函数include和header之后,我仍然无法使其工作。代码之一是:

一个代码cookie.php是:

<?php
setcookie("cookiename",$_REQUEST['name']);
if(isset($_COOKIE['cookiename'])){
$cookieSet = ' The Cookie is ' .  $_COOKIE['cookiename'];
} else {
$cookieset = ' No Cookie has been set';
}
setcookie("cookiepwd",$_REQUEST['pwd']);
print_r($_COOKIE);
?>

当我第一次运行此代码时,它不会显示任何内容。我可以第二次看到cookie数据。从某个网站上可以看出,cookie不会在同一页面上阅读。

所以我将print_r($ _ COOKIE)移动到第二个php文件,并在上面的文件中添加了函数include()或header(),但两者都不起作用。

Cookie2.php:

<?php
setcookie("cookiename",$_REQUEST['name']);
if(isset($_COOKIE['cookiename'])){
$cookieSet = ' The Cookie is ' .  $_COOKIE['cookiename'];
} else {
$cookieset = ' No Cookie has been set';
}
setcookie("cookiepwd",$_REQUEST['pwd']);
include(‘printcookie.php’);
//or header("Location: printcookie.php")
?>

printcookie.php:

<?php
print_r($_COOKIE);
?>

非常感谢您提前回答!

米歇尔

3 个答案:

答案 0 :(得分:3)

setcookie仅设置正在发送给客户端的标头。它不会改变$_COOKIE超全球。

另一方面 - $_COOKIE已填满从客户 发送的Cookie

因此,在第一步 - 您使用setcookie设置Cookie并且$_COOKIE中没有任何内容,因为客户端尚未发送它,并且只会在下一个请求中发送。

没有办法做你想做的事,而不是手动修改$_COOKIE

PS:将用户密码放入cookie中是个坏主意

答案 1 :(得分:2)

给予zerkms答案,但我只想重申:

  1. Cookie可以存储信息,例如用户的主题首选项或首选的开始页面等。他们的错误代表被用于身份和身份验证处理。有些cookie基本上有“isAdmin = 0”以控制用户访问。 非常很容易将其更改为isAdmin=1并且有一个字段日。由于您不熟悉PHP,现在请花点时间了解会话,而这对您来说并不熟悉。

  2. 使用setcookie设置Cookie时,您将使用Cookie信息向浏览器发送HTTP标头。然后,浏览器将在将来对服务器的任何请求中传回该cookie。 $_COOKIE全局变量保存从浏览器传递到服务器的cookie信息。

  3. 由于您使用$_REQUEST来获取Cookie名称,因此您无需检查Cookie(否则您无法将数据设置为正确吗?)。所以考虑走这条路:

    if(!isset($_COOKIE['cookiename'])) {
          $name = $_POST['name']);
          setcookie("cookiename",$name);
     } else {
        $name = $_COOKIE['cookiename']);
     }
    
    echo "Welcome back $name!";
    
  4. 如果他们清除cookies等,这也会有所帮助。

    但实际上,更安全的路线是:

    session_start();
    if(!isset($_SESSION['name'])){
        $_SESSION['name'] = $_POST['name']);
    }
    if(!isset($_SESSION['pwd'])){
        $_SESSION['pwd'] = $_POST['pwd']);
    }
    
    $name =  $_SESSION['name'];
    $pwd = $_SESSION['pwd'];
    

    即使这对于严肃的Web安全性也不赞成,您应该根据存储的哈希检查密码,然后使用其他全局变量删除它,以确认会话完整性。但是现在有一个完整的StackExchange。

答案 2 :(得分:0)

作为一种解决方法,您可以在检查cookie后使用location()来访问存储的数据。

但请注意,location()会失败,如果有任何内容(包括脚本中的中断和空白)已经发送到浏览器。