can';在php中,关闭并重新打开浏览器后,不读取cookie值
我试图找出isset()和empty()与setcookie()和$\u COOKIE[]的关系。但我在路上遇到了一个路障 这是我的test.phpcan';在php中,关闭并重新打开浏览器后,不读取cookie值,php,cookies,setcookie,undefined-index,Php,Cookies,Setcookie,Undefined Index,我试图找出isset()和empty()与setcookie()和$\u COOKIE[]的关系。但我在路上遇到了一个路障 这是我的test.php <?php //initialize cookie $expiry = time()+60*60*9000; setcookie('name1', '4', $expiry, '/', '', '', TRUE); if (isset ($_COOKIE['name1'])) { echo 'cookievalue ' . $_
<?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中设置的$\u COOKIE[]变量。(不过,正如预期的那样,在test.php中输出cookie值之前,test.php必须刷新一次。)
但是,如果我关闭浏览器,重新打开它,然后只运行test1.php,我会在$u COOKIE['name1']中的name1上得到一个“未定义索引”通知
为什么test1.php无法拾取浏览器关闭前定义的$\u COOKIE变量?cookie仍应存储在计算机中。为什么在关闭并重新打开浏览器后,它不能从中提取cookie值?您不需要isset(),它非常简单
if ($_COOKIE['name1']) {
回答我自己的问题
多亏了@Dagon,我尝试了使用不同的浏览器。它在另一个浏览器(Firefox)中工作。它在我的Chrome浏览器中不起作用(我怀疑我的Chrome浏览器上有一些反cookie扩展正在删除cookie,或者类似的东西)。你尝试过其他浏览器吗?php的cookie通常是会话cookie,这意味着当浏览器关闭时,它们会自动删除。如果您想要持久cookie,则必须使用
会话设置cookie\u params()
:@MarcB此设置不会被setcookie()中的'expiry'参数覆盖??它应该被覆盖。使用firebug或httpfox之类的工具来观察浏览器中进出的标题,并查看cookie值是否被发回。如果不是这样,那么您在setcookie中使用的选项就有问题了,或者您的服务器VS浏览器时间太长了,从浏览器的角度来看,60*60*9000实际上已经过去了。@Dagon感谢您的建议。它在另一个浏览器(Firefox)中工作。它在我的Chrome浏览器中不起作用(我怀疑我在Chrome上有一些反cookie的扩展,它正在删除cookie——或者类似的东西),虽然为true,但没有解决问题我重写了test1.php,没有所有的isset()和empty,只有if($\u cookie['name1']){,并且它工作得很好,读取了设置好的cookie,没有问题