查看cookie是否存在于设置它们的同一文件中


see if cookie exists on the same file as they were set

在一个文件中,我有这样的代码来设置一些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已过期。