PHP cookie在第二个刷新页面中设置

时间:2013-06-13 11:20:46

标签: php

我想在网页中使用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

5 个答案:

答案 0 :(得分:7)

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

  1. 浏览器访问页面(登录或类似内容),并发送无cookie数据。
  2. 服务器设置cookie(这意味着将它们包含在HTTP回复的标题中)。
  3. 浏览器访问页面并发回cookie数据。
  4. 服务器可以查看cookie数据并使用它。
  5. 要修复此问题,请在设置Cookie后将用户重定向到要显示数据的页面,而不是简单地显示页面。这样您就可以使用cookie数据。

答案 1 :(得分:3)

嗯,这没有错。第一次刷新时,实际运行脚本来设置cookie。所以,它执行else语句。

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

以下是图片描述:

enter image description here

但是,您的脚本存在问题。每次刷新页面都会将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);
}

答案 2 :(得分:1)

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

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

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

页面刷新后会显示Cookie。

您的代码也可以简化:

 echo "Welcome " . isset($_COOKIE["user"]) ? $_COOKIE["user"] : "guest" . "!<br>";

答案 3 :(得分: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>";
}

答案 4 :(得分:0)

我猜你想要这样的东西:

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