我很难搞清楚这一点。我是PHP的新手
我只是想在cookie中放入一个querystring变量,并让它在网站的所有页面上都可用。现在发生的事情是它只在有查询字符串时才设置cookie,而当我转到另一个页面时cookie就消失了。
我所有的php页面都在顶部有这个代码:
<?php
$expire=time()+60*60*24*30;
if (isset($_GET['v'])) {
$thev = $_GET['v'];
if (!isset($_COOKIE["ckv"])) {
setcookie("ckv", $_GET['v'], $expire);
}
} else if (isset($_COOKIE["ckv"])) {
$thev = $_COOKIE["ckv"];
} else {
$thev = 'nothing';
}
?>
**按顺序点击了这些。所以第3页应该显示cookie
谢谢
答案 0 :(得分:1)
我同意上述答案,请考虑使用SESSIONS代替$ _COOKIE。它们比cookie更灵活,更安全
答案 1 :(得分:0)
我可以看到三个答案。
最可能的是第1页和第2页位于不同的目录中。默认情况下,cookie放在当前目录中(在浏览器中指定 - 忽略任何包含/ apache重定向等),并且仅适用于该目录及以下目录。如果你有
/dir1/page1
/dir2/page2
然后,第1页中的cookie不会默认在第2页中提供。
您可以通过指定路径(see documentation)来解决这个问题。在这里你声明了cookie应用的目录 - 最常见的是你将它设置为'/'(root),这意味着应用于应用程序中的任何页面。
现在有些陷阱:
由于你已经在'/ dir1 /'中找到了一个cookie,如果你修改你的代码以包含'/'路径并运行,那么你实际上会有两个cookie - 一个在'/'和一个在'/ dir1 /'。您的第1页仍将获得'/ dir1 /'cookie,除非您先删除它。还要检查'/ dir2 /'中是否还有一个空白的cookie(即你的代码中没有“空白”,而不是空格 - 这意味着你有一个cookie,但是有一个空值)。在子目录中使用cookie会引起很多挫折。
其他可能的原因与缓存(确保您没有缓存值)以及不同的域(您不能跨域共享cookie,如果您想跨子域共享,那么您需要指定根域 - 参见文档。)