【问题标题】:can't read cookie value after browser close and reopen, in php浏览器关闭并重新打开后无法读取cookie值,在php中
【发布时间】:2014-12-02 11:13:14
【问题描述】:

我试图弄清楚 isset() 和 empty() 与 setcookie() 和 $_COOKIE[] 的关系。但我在路上遇到了路障。

这是我的 test.php

<?php

//initialize cookie
$expiry = time()+60*60*9000;
setcookie('name1', '4', $expiry, '/', '', '', TRUE);

if (isset ($_COOKIE['name1'])) {

    echo 'cookievalue ' . $_COOKIE['name1'];

} else {

    echo 'cookie value not set';

}


if (!empty ($_COOKIE['name1'])) {

    echo 'cookievalue ' . $_COOKIE['name1'];

} else {

    echo 'cookie value empty';

}

?>

这是我的 test1.php

<?php

if (isset ($_COOKIE['name1'])) {

    echo 'cookievalue ' . $_COOKIE['name1'];

} else {

    echo 'cookie value not set';

}


if (!empty ($_COOKIE['name1'])) {

    echo 'cookievalue ' . $_COOKIE['name1'];

} else {

    echo 'cookie value empty';

}

echo 'cookievalue ' . $_COOKIE['name1'];


?>

当我第一次加载 test.php,然后是 test1.php 时,一切似乎都正常。也就是说,test1.php 能够读取通过 setcookie() 在 test.php 中设置的 $_COOKIE[] 变量。 (尽管正如预期的那样,在 test.php 中输出 cookie 值之前必须刷新一次 test.php。)

但是,如果我关闭浏览器并重新打开它,然后只运行 test1.php,我会在 $_COOKIE['name1'] 中的 name1 上收到“未定义索引”通知。

为什么test1.php 不能提取浏览器关闭前定义的$_COOKIE 变量? cookie 仍应存储在计算机中。为什么关闭并重新打开浏览器后无法从中提取cookie值?

【问题讨论】:

  • 您是否尝试过其他浏览器?
  • php 的 cookie 通常是 SESSION cookie,这意味着它们会在浏览器关闭时自动删除。如果你想要一个持久的cookie,那么你必须使用session_set_cookie_params()正确设置过期时间:php.net/manual/en/…
  • @MarcB 此设置不会被 setcookie() 中的 'expiry' 参数覆盖??
  • 应该的。使用诸如 firebug 或 httpfox 之类的东西来观察进出浏览器的标头,并查看您的 cookie 值是否被发回。如果不是,那么您在 setcookie 中使用的选项或者您的服务器与浏览器时间已经过去了,从浏览器的角度来看,60*60*9000 实际上是过去的时间。
  • @Dagon 谢谢你的建议。它适用于另一个浏览器(Firefox)。它在我的 Chrome 浏览器中不起作用(我怀疑我在 Chrome 上有一些反 cookie 扩展程序正在删除 cookie - 或类似的东西)

标签: php cookies setcookie undefined-index


【解决方案1】:

回答我自己的问题。

感谢@Dagon 使用不同的浏览器进行了尝试。它适用于另一个浏览器(Firefox)。它在我的 Chrome 浏览器中不起作用(我怀疑我在 Chrome 上有一些反 cookie 扩展程序正在删除 cookie - 或类似的东西)。

【讨论】:

    【解决方案2】:

    你不需要 isset() 它像

    这么简单
    if ($_COOKIE['name1']) {
    

    【讨论】:

    • 虽然正确,但不能解决问题
    • 我重写了 test1.php 没有你所有的 isset() 和空的,只有 if($_COOKIE['name1']) { 它工作正常读取设置的 cookie 没有问题跨度>
    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2020-01-23
    • 2020-10-10
    • 2013-07-22
    相关资源
    最近更新 更多