PHP不会持久存在?

时间:2012-09-25 14:45:41

标签: php cookies session-cookies setcookie

如何让cookie在php中持续存在?


give_cookie.php

<?php
    if (!isset($_COOKIE["muffin"]))
        setcookie("muffin", "55", 100 * 60 * 60 * 24 * 30);
    $_COOKIE["lid"]=true;
?>

jar.php

<?php
    var_dump($_COOKIE);
    if($_COOKIE["lid"])
        echo "open";
?>

按顺序运行代码可以输出:

  

array(0){}注意:未定义的索引:第3行的jar.php中的盖子

jar.php中嵌入来自give_cookie.php的代码,可以输出:

  

array(1){[“lid”] =&gt; bool(true)}打开

4 个答案:

答案 0 :(得分:2)

你应该给出一个UNIX时间戳,表明cookie何时到期(自纪元以来计算)作为函数调用的第三个参数。

  

Cookie过期的时间。这是一个Unix时间戳,所以数量也是如此   自纪元以来的几秒钟。换句话说,你很可能会设置   这与time()函数加上你之前的秒数   希望它过期。或者你可以使用mktime()。时间()+ 60 * 60 * 24 * 30会   将Cookie设置为在30天后过期。如果设置为0,或省略,则   cookie将在会话结束时(浏览器时)到期   关闭)。

我建议你阅读setcookie的文档。

答案 1 :(得分:1)

您正在为muffin设置Cookie并尝试检索lid。您还需要为lid设置setcookie。

答案 2 :(得分:1)

我认为您设置的时间仍在过去

目前

time() = 1348584550

100 * 60 * 60 * 24 * 30 =  259200000

所以试试

setcookie("muffin", "55", time() + (100 * 60 * 60 * 24 * 30));

if($_COOKIE["muffin"])
    echo "open";

答案 3 :(得分:0)

其他答案是正确的,但还有另一个考虑因素。当服务器将html发送到客户端时,Cookie会设置为,当用户请求页面时,会从用户收到Cookie。这意味着,如果您尝试读取正确的cookie,则在下次用户重新加载页面之前它将为空。避免这种情况的唯一方法是,正如您所做的那样,不确定是否有意,手动分配cookie的值并同时设置它,因为它是超全局的。这不是一个好习惯,因为Cookie的值会因此执行而丢失。这应该工作,但没有做太多工作:

<强> give_cookie.php

<?php
    if (!isset($_COOKIE["muffin"]))
        setcookie("muffin", "55", 100 * 60 * 60 * 24 * 30);
    setcookie("lid", TRUE, time() + 100 * 60 * 60 * 24 * 30);
    $_COOKIE["lid"]=TRUE;

?>

<强> jar.php

<?php
    if($_COOKIE["lid"])
        echo "open";
?>

PS,你的代码还有很多问题(除了它没有任何用处)。告诉我们您要实现的目标,以便我们为您提供更多帮助。