【问题标题】:php set cookie issuephp设置cookie问题
【发布时间】:2011-05-09 11:10:28
【问题描述】:

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

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

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

Cookie testCookie added.  hello cookie

但它不读取值。如果我刷新页面,则会读取该值并显示触发错误

Cookie testCookie changed.  hello cookie

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

【问题讨论】:

  • 检测 cookie 被添加或更改的代码是什么?同样要获取 cookie 的值,第一个页面加载后将 显示它,它将在第二次刷新后显示。
  • 这是我的问题,为什么它不显示在第一页加载/我可以做些什么来第一次读取 cookie 的值??
  • 查看我的回答,它应该解释它是如何工作的。

标签: php setcookie


【解决方案1】:

正如我在评论中所说,根据您的描述(虽然相当模糊且不太容易理解),我认为问题可能是您试图在将 cookie 发送到服务器之前对其进行读取。

cookie 的工作方式如下:

  1. 您提出请求
  2. 服务器将 cookie 标头发送回客户端
  3. 页面加载 - 在此页面加载时,Cookie 对 PHP 可见
  4. 刷新
  5. 客户端向服务器发送 cookie 标头
  6. 服务器收到 cookie 标头,因此 PHP 可以读取它
  7. 页面加载 - Cookie IS在此处可见。

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

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

所以是这样的:

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

然后就可以正常阅读了。请注意,我真的不建议覆盖自动超全局的值($_REQUEST$_POST$_GET 等也是如此),而是建议您只存储您正在设置的值和使用它。


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

例如,假设您的流程如下:login.php -> account.php。而不是将您的登录表单直接发布到account.php,您有两种选择。

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

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

【讨论】:

  • 没有问题,只是上传了我的答案,但有更好的解决方法! :-)
【解决方案2】:

它可能相关或不相关,但您将布尔值分配给期望整数或字符串的参数。如果您是 PHP 新手,那么仔细阅读手册并理解函数签名非常重要。在这种情况下,您必须查看http://php.net/setcookie,您可以在其中阅读:

bool setcookie ( 字符串 $name [, 字符串 $value [, int $expire = 0 [, 字符串 $path [, 字符串 $domain [, bool $secure = false [, bool $httponly = 假]]]]]])

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

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

【讨论】:

  • tnx 回复,最初我无法在 localhost 上设置 cookie,所以搜索产生了这个代码 :) 我稍后会修复它......
猜你喜欢
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多