1

如何让 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从in嵌入代码give_cookie.php给了我输出:

数组(1){[“盖子”]=>布尔(真)}打开

4

4 回答 4

2

您应该提供 cookie 何时过期的 UNIX 时间戳(从纪元开始计算)作为函数调用的第三个参数。

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

我建议您阅读setcookie.

于 2012-09-25T14:49:11.617 回答
1

您正在设置 cookiemuffin并尝试检索lid.you 还需要 setcookie lid

于 2012-09-25T14:50:00.070 回答
1

我想你设定的时间还在过去

目前

time() = 1348584550

100 * 60 * 60 * 24 * 30 =  259200000

所以试试

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

if($_COOKIE["muffin"])
    echo "open";
于 2012-09-25T14:51:00.047 回答
0

其他答案是正确的,但还有另一个考虑。Cookies在服务器向客户端发送 html 时设置,并在用户请求页面时从用户处接收。这意味着,如果您尝试读取刚刚正确设置的 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,您的代码还有更多问题(除了它没有任何用处)。告诉我们您想要达到的目标,以便我们为您提供更多帮助。

于 2012-09-25T14:58:25.047 回答