Cookie不会跨多个PHP页面持久存在

时间:2012-10-11 03:14:37

标签: cookies php

我很难搞清楚这一点。我是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';
}
?>
  1. 第1页工作! (显示cookie)
  2. page1没有查询字符串工作! (显示cookie)
  3. 第2页BROKEN。 (Cookie消失!)
  4. **按顺序点击了这些。所以第3页应该显示cookie

    谢谢

2 个答案:

答案 0 :(得分:1)

我同意上述答案,请考虑使用SESSIONS代替$ _COOKIE。它们比cookie更灵活,更安全

http://us3.php.net/manual/en/features.sessions.php

答案 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,如果您想跨子域共享,那么您需要指定根域 - 参见文档。)