php设置cookie问题

Raf*_*fay 4 php setcookie

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

setcookie("testCookie ", "hello cookie", false, "/", false);
Run Code Online (Sandbox Code Playgroud)

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

Cookie testCookie added.  hello cookie
Run Code Online (Sandbox Code Playgroud)

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

Cookie testCookie changed.  hello cookie
Run Code Online (Sandbox Code Playgroud)

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

Rud*_*ser 10

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

cookie的工作方式如下:

  1. 你提出要求
  2. 服务器SENDS cookie头回到客户端
  3. 页面加载 - 在此页面加载时PHP 可见Cookie
  4. 刷新
  5. 客户端SENDS cookie头到服务器
  6. 服务器RECEIVES cookie头,因此PHP可以读取它
  7. 页面加载-曲奇IS在这里看到.

如果您还没有尝试过,请再次刷新!

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

所以像这样:

setcookie("helloworld", .. );
$_COOKIE['helloworld'] = $value;
Run Code Online (Sandbox Code Playgroud)

然后你可以正常阅读.请注意,我不会真的建议重写自动超全局的值(同样适用于$_REQUEST,$_POST,$_GET,等),而会建议你刚刚保存你的设置值,并使用它.


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

例如,假设您的流程如下:login.php- > account.php.而不是直接POST您的登录表单,account.php您有2个选项.

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

这样,account.php总能看到你的cookie.