在一个文件中,我有这样的代码来设置一些cookie
setcookie("token", "value", time()+60*60*24*100, "/");
setcookie("secret", "value", time()+60*60*24*100, "/");
setcookie("key", "value", time()+60*60*24*100, "/");
我想知道如何检查这些cookie是否设置在同一个文件上,最好是在设置好之后。我试过这个
if(!isset($_COOKIE['token']) || !isset($_COOKIE['secret']) || !isset($_COOKIE['key']){
//do something
}
但它不起作用。。
$_COOKIE是在用户已经拥有COOKIE并请求新页面时设置的。
您不能设置COOKIE,然后在之后立即使用$_COOKIE
我们真的不应该为你的问题而烦恼,因为你没有从之前的问题中得到任何关于完全相同问题的建议,但现在是:
选项A
// As you do setCookie, also set the value in $_COOKIE
setCookie("foobar", "bat", time() + COOKIE_LIFETIME);
$_COOKIE["foobar"] = "bat";
var_dump($_COOKIE["foobar"]);
选项B
不要使用$_COOKIE
来存储您的信息。分离变量$token
、$secret
和$key
,并用$_COOKIE
中的值加载这些变量。如果$_COOKIE
为空,请手动初始化它们并调用setCookie
。
if (isset($_COOKIE["token"]))
$token = $_COOKIE["token"];
else
{
$token = "defaultValue";
setCookie("token", $token, COOKIE_LIFETIME);
}
// Use $token instead of $_COOKIE["token"] from now on.
选项C
如果用户没有设置cookie,请执行setCookie
并使用header()
将用户重新定位到同一站点。如果用户不允许您设置cookie,请注意无限重定位。
if (!isset($_COOKIE["token"])
{
setCookie("token", "defaultValue", COOKIE_LIFETIME);
header("Location: ".$_SERVER["REQUEST_URI"]); // insert reasonable URL here.
exit;
}
备选方案B将是首选方案。希望不要看到第三次问这个问题。
如果用户将在未来的请求中发送您的cookie,则您无法签入同一请求。setCookie
只是呼吁用户浏览器在未来的请求中附上此信息。你会知道它是否有效,cookie是否在下一次请求时发送。如果没有,则可能出现以下3种情况:a)用户的浏览器不允许您设置cookie,b)用户以前没有访问过您的网站,c)以前设置的cookie已过期。