php设置cookie问题

时间:2011-05-09 11:10:28

标签: php setcookie

我正在使用以下语法在localhost上设置cookie

setcookie("testCookie ", "hello cookie", false, "/", false);

问题是我第一次访问页面时创建了cookie并且firebug显示了

Cookie testCookie added.  hello cookie

但它没有读取价值。如果我刷新页面,则读取值并显示火灾错误

Cookie testCookie changed.  hello cookie

如何在第一次加载页面时获取cookie的值?

2 个答案:

答案 0 :(得分:10)

正如我在评论中提到的那样(虽然相当模糊且不太容易理解),但我认为问题可能是您在将cookie发送到服务器之前尝试读取cookie。

Cookie的工作方式如下:

  1. 您提出请求
  2. 服务器SENDS cookie标头返回客户端
  3. 网页加载 - 此页面加载
  4. 时,PHP 可见
  5. 刷新
  6. 客户端SENDS Cookie标头到服务器
  7. 服务器RECEIVES cookie标头,因此PHP可以读取它
  8. 页面加载 - Cookie IS 在此处可见。
  9. 如果您还没有尝试过,请再次刷新!

    由于您想要在设置它的同时阅读它,只需存储您正在设置的值并使用它。或者(虽然这是未经测试的),您可以在$_COOKIE数组中手动​​设置它。

    这样的事情:

    setcookie("helloworld", .. );
    $_COOKIE['helloworld'] = $value;
    

    然后你可以正常阅读。请注意,我不会真的建议覆盖自动超全局的值(同样适用于$_REQUEST$_POST$_GET等等,而是建议您只存储你设定和使用它的价值。


    另一种方法是使用“网关”形式,这意味着您将在网关页面上设置cookie,然后将继续将您重定向到下一页。

    例如,假设您的流量如下:login.php - > account.php。而不是将您的登录表单直接发送到account.php,您有2个选项。

    选项1:POST回login.php,设置cookie,然后重定向到account.php。 选项2:拥有一个网关,例如logincheck.php,POST到该网关,设置cookie,然后重定向到account.php

    这样,account.php始终可以看到您的Cookie。

答案 1 :(得分:3)

它可能是相关的,但是您要为需要整数或字符串的参数赋予布尔值。如果您是PHP新手,请务必仔细阅读本手册并了解功能签名。在这种情况下,您必须检查http://php.net/setcookie,您可以在这里阅读:

  

bool setcookie(string $ name [,   string $ value [,int $ expire = 0 [,   string $ path [,string $ domain [,bool   $ secure = false [,bool $ httponly =   false]]]]]])

另外,我在运行代码时收到警告:

Warning: Cookie names cannot contain any of the following '=,; \t\r\n\013\014'