我想在网页中使用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
答案 0 :(得分:7)
设置Cookie时,会将其发送到浏览器。下次浏览器发送页面请求时,它会发回cookie信息,页面可以使用它。
要修复此问题,请在设置Cookie后将用户重定向到要显示数据的页面,而不是简单地显示页面。这样您就可以使用cookie数据。
答案 1 :(得分:3)
嗯,这没有错。第一次刷新时,实际运行脚本来设置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);
}
答案 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);
}