【问题标题】:see if cookie exists on the same file as they were set查看 cookie 是否存在于与设置相同的文件中
【发布时间】:2012-03-14 00:13:18
【问题描述】:

在一个文件中,我有这段代码来设置一些 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

}

但它不起作用..

【问题讨论】:

  • cookies只有在发回浏览器时才设置,只有在浏览器发出新请求时才能被PHP测试……所以“不!它们不存在于脚本中他们被设置在其中”
  • 超全局变量在脚本启动时设置,然后 PHP 不会更改它们以反映您在脚本中所做的任何事情。

标签: php cookies


【解决方案1】:

$_COOKIE 在用户已经拥有 cookie 并请求新页面时设置。

你不能设置cookie然后在之后使用$_COOKIE

【讨论】:

  • 有什么方法可以查看当时是否设置了 cookie?
【解决方案2】:

我们不应该真正为您的问题烦恼,因为您没有从您之前的问题中就完全相同的问题接受任何建议,但这里是:

选项 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 是否在下一个请求中发送。如果不符合以下三种情况是可能的:a) 用户的浏览器不允许您设置 cookie,b) 用户之前没有访问过您的网站,c) 之前设置的 cookie 已过期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多