【发布时间】: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