代码之家  ›  专栏  ›  技术社区  ›  Kenny Cason

$\u COOKIE[]似乎没有反映设置后的更改

  •  4
  • Kenny Cason  · 技术社区  · 14 年前

    我不记得以前在使用Cookies时遇到过很多问题,但是我在玩的时候遇到了一些意想不到的结果。

    (我在本地主机上运行,因此我的域设置)

    <?php
    $sessionCookie = rand();
    setcookie("crav_auto_login_cookie", $sessionCookie, false,"/crav/", false);
    echo "Cookie Set<br/>";
    echo "Cookie equals: ".$_COOKIE["crav_auto_login_cookie"]."<br/>";
    echo "should equal: ". $sessionCookie;
    ?>
    

    Cookie Set
    Cookie equals: 457718770
    should equal: 318511886

    我显然遗漏了一些东西,但不知道为什么值不同。是不是因为页面调用中加载了cookies $_COOKIE["crav_auto_login_cookie"] 是否在打开页时从调用的实例返回结果,而不反映新设置的值?如果是这样,那为什么?

    3 回复  |  直到 14 年前
        1
  •  5
  •   Daniel Vandersluis    14 年前

    setcookie 设置要发送回客户端的标头以设置cookie。新的cookie将无法在中访问 $_COOKIE 数组(其中包含cookies) 直到下一个请求。

    1. 用户的浏览器发送 请求 到你的服务器。此请求包含标头,包括为该用户为您的域设置的Cookie。PHP填补了 (以及 $_GET , $_POST 等)数组。
    2. 服务器解析用户的请求,并设置 响应 . 此响应以响应头(包括您自己设置的所有头)开始 header ). 所有标题必须在任何页面输出之前(正如您可能遇到的那样,如果您在开始输出页面内容之后尝试发送更多标题,PHP将给您一个错误)。
    3. 客户端解析它接收到的头和内容,根据需要设置cookies,并呈现页面(实际上,这很可能是在接收页面时发生的)。

    因此,当客户端接收并处理设置的cookie头时,客户端已经完成了与服务器的通信,这就是为什么在下一个请求之前,cookie不会出现在PHP中的原因。

        2
  •  1
  •   Kevin    14 年前

    PHP.net's setcookie documentation 在“常见陷阱”下:

    下一次加载 下次加载时检查cookie cookie过期前的页面。

        3
  •  1
  •   Frankey    12 年前

    你可以直接覆盖超全局。

    $sessionCookie=rand();
    setcookie(“crav_auto_login_cookie”,$sessionCookie,false,“/crav/”,false);$_cookie[“crav_auto_login_cookie”]=$sessionCookie;

    回显“Cookie Set”;