Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在第二个刷新页面中设置PHP cookie_Php - Fatal编程技术网

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

在第二个刷新页面中设置PHP cookie,php,Php,我想在网页中使用cookie,我想用它来保存任何可选变量。但是在使用setcookie和刷新页面isset()后无法检测到,我必须有很多刷新页面才能使用它 我不能在第一次刷新或访问页面中使用它 PHP: setcookie("user", "Alex Porter", time()+3600); if (isset($_COOKIE["user"])) echo "Welcome " . $_COOKIE["user"] . "!<br>"; else echo "Welco

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

我猜你想要这样的东西:

if (isset($_COOKIE["user"]))
  echo "Welcome " . $_COOKIE["user"] . "!<br>";
else {
  echo "Welcome guest!<br>";
  setcookie("user", "Alex Porter", time()+3600);
}
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);
}
if(isset($\u COOKIE[“用户”]))
回应“欢迎”$_COOKIE[“用户”]。“!
”; 否则{ 回应“欢迎客人!
”; setcookie(“用户”、“Alex Porter”,time()+3600); }
Cookie被设置为特定的路径和域。您应该将setcookie()更改为

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

页面刷新后,Cookie将可见。

您的代码也可以简化:

 echo "Welcome " . isset($_COOKIE["user"]) ? $_COOKIE["user"] : "guest" . "!<br>";
echo“欢迎”。isset($\u COOKIE[“用户”])$_COOKIE[“用户”]:“来宾”。“!
”;
设置cookie时,会将其发送到浏览器。下一次浏览器发送页面请求时,它会将cookie信息发送回来,页面可以利用它

  • 浏览器访问页面(登录或类似),不发送cookie数据
  • 服务器设置cookie(这意味着将它们包含在HTTP应答的头中)
  • 浏览器访问页面并发回cookie数据
  • 服务器可以查看cookie数据并利用它

  • 要解决此问题,请将用户重定向到设置cookie后要在其中显示数据的页面,而不是简单地显示页面。通过这种方式,您可以使用cookie数据。

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

    如果希望cookie数据在您的案例中立即可用,可以尝试以下方法:

    if (isset($_COOKIE["user"]))
      echo "Welcome " . $_COOKIE["user"] . "!<br>";
    else {
      echo "Welcome guest!<br>";
      setcookie("user", "Alex Porter", time()+3600);
    }
    
    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);
    }
    
    if(isset($\u COOKIE[“用户”]))
    回应“欢迎”$_COOKIE[“用户”]。“!
    ”; 否则{ $user=“Alex Porter”; setcookie(“用户”,$user,time()+3600); 回显“欢迎$user!
    ”; }
    好吧,这没什么错。第一次刷新时,实际上是运行脚本来设置cookie。因此,它执行else语句

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

    以下是一个图片说明:

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

    if (isset($_COOKIE["user"]))
      echo "Welcome " . $_COOKIE["user"] . "!<br>";
    else {
      echo "Welcome guest!<br>";
      setcookie("user", "Alex Porter", time()+3600);
    }
    
    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);
    }
    
    if(isset($\u COOKIE[“用户”]))
    回应“欢迎”$_COOKIE[“用户”]。“!
    ”; 其他的 { 回应“欢迎客人!
    ”; setcookie(“用户”、“Alex Porter”,time()+3600); }
    这就是它的工作原理。cookie是在响应中设置的,并随下一个请求一起发送回。这可能与问题有什么关系?他说cookie不可见,可能是设置正确的cookie路径有问题。请重新阅读问题。OP表示cookie在第一次使用时(即此代码首次执行时)不可用。刷新意味着他访问了站点并刷新了它,或者可能不是OP所说的刷新。我正在使用一些get变量在同一页面上重定向,但我获取的标头已发送错误。“标头已发送错误”是因为您在更改标头之前输出了某些内容(Cookie是标头的一部分)。必须先设置cookie,然后才能从PHP返回任何输出。