6

我想cookie在网页中使用,我想用它来保存任何可选变量。但是在使用setcookie和刷新页面后isset()无法检测到,我必须多次刷新页面才能使用它,

我不能在第一次刷新或访问页面时使用它。

PHP:

setcookie("user", "Alex Porter", time()+3600);
if (isset($_COOKIE["user"]))
  echo "Welcome " . $_COOKIE["user"] . "!<br>";
else
  echo "Welcome guest!<br>";

//unset($_COOKIE['user']);
//setcookie('user', '', time() - 3600); 

结果:

保存并刷新页面后

Welcome guest!

第二次刷新:

Welcome Alex Porter
4

5 回答 5

9

当您设置 cookie 时,它​​会被发送到浏览器。下次浏览器发送页面请求时,它会将 cookie 信息发回,页面可以使用它。

  1. 浏览器访问页面(登录或类似的东西),并且不发送 cookie 数据。
  2. 服务器设置 cookie(这意味着将它们包含在 HTTP 回复的标头中)。
  3. 浏览器访问页面并发送回 cookie 数据。
  4. 服务器可以看到 cookie 数据并加以利用。

要解决此问题,请在设置 cookie 后将用户重定向到要显示数据的页面,而不是简单地显示页面。这样您就可以使用 cookie 数据。

于 2013-06-13T11:25:36.517 回答
5

好吧,这并没有错。第一次刷新时,实际上是运行脚本来设置 cookie。因此,它执行 else 语句。

当您第二次刷新它时,该isset()函数返回 true 并执行 if 语句。

这是一个图片描述:

在此处输入图像描述

但是,您的脚本有问题。每次刷新页面都会将 cookie 时间更新为3600 seconds. 因此,只有在用户浏览器上没有设置 cookie 时才需要设置 cookie,如下所示:

if (isset($_COOKIE["user"]))
  echo "Welcome " . $_COOKIE["user"] . "!<br>";
else
{
  echo "Welcome guest!<br>";
  setcookie("user", "Alex Porter", time()+3600);
}
于 2013-06-13T11:26:42.983 回答
1

Cookie 设置为特定的路径和域。您应该将 setcookie() 更改为

setcookie ("user", "Alex Porter", time()+3600, "/", "youdomain.com");

如果设置为“/”,则 cookie 将在整个域 (youdomain.com) 中可用。

页面刷新后 Cookie 将可见。

您的代码也可以简化:

 echo "Welcome " . isset($_COOKIE["user"]) ? $_COOKIE["user"] : "guest" . "!<br>";
于 2013-06-13T11:23:32.727 回答
1

$_COOKIE数据是从客户端的请求数据中读取的,不会立即写入setCookie()。这是正常行为,应纳入您的程序流程。

如果您希望 cookie 数据在您的情况下立即可用,您可以尝试以下操作:

if (isset($_COOKIE["user"]))
    echo "Welcome " . $_COOKIE["user"] . "!<br>";
else {
    $user = "Alex Porter";
    setcookie("user", $user, time()+3600);
    echo "Welcome $user!<br>";
}
于 2013-06-13T11:26:26.160 回答
0

我猜你想要这样的东西:

if (isset($_COOKIE["user"]))
  echo "Welcome " . $_COOKIE["user"] . "!<br>";
else {
  echo "Welcome guest!<br>";
  setcookie("user", "Alex Porter", time()+3600);
}
于 2013-06-13T11:23:10.567 回答