繁体   English   中英

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

[英]PHP cookie set in second refresh page

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

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

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

要修复它,请将用户重定向到设置cookie后要显示数据的页面,而不是简单地显示页面。 这样您就可以使用cookie数据。

嗯,这没有错。 第一次刷新时,实际运行脚本来设置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);
}

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

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

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

页面刷新后将显示Cookie。

您的代码也可以简化:

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

$_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>";
}

我想你想要这样的东西:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM