1

我要疯了。我是 PHP 新手

我只是想把一个查询字符串变量放在一个 cookie 中,并让它在网站上的所有页面上都可用。现在发生的情况是,它只在有查询字符串时设置 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 页已损坏。(饼干不见了!)

** 这些是按顺序点击的。所以第 3 页应该显示 cookie

谢谢

4

2 回答 2

1

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

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

于 2012-10-11T03:23:44.887 回答
0

我可以看到三个答案。

最有可能的是第 1 页和第 2 页位于不同的目录中。默认情况下,cookie 放置在当前目录中(在浏览器中指定 - 忽略任何包含/apache 重定向等),并将仅适用于该目录及以下目录。如果你有

/dir1/page1 
/dir2/page2

那么默认情况下,第 1 页中的 cookie 将不会在第 2 页中可用。

您可以通过指定路径来解决此问题(请参阅文档)。在这里,您声明 cookie 将应用到的目录 - 最常见的是您将其设置为“/”(根),这意味着适用于应用程序中的任何页面。


现在有一些问题:

由于您已经在“/dir1/”中获得了一个 cookie,如果您修改代码以包含“/”路径并运行,那么您实际上将有两个 cookie - 一个在“/”,一个在“/”目录1/'。除非您先将其删除,否则您的第 1 页仍将获得“/dir1/”cookie。还要检查'/dir2/' 中是否也没有空白cookie(即,您的代码中没有“空”,而不是空格-这意味着您有一个cookie,但具有空白值)。在子目录中放置 cookie 会导致很多挫败感。

其他可能的原因与缓存有关(确保您没有缓存值)以及不同的域(您不能跨域共享 cookie,如果您想跨子域共享,那么您需要指定根域- 见文档)。

于 2012-10-11T04:51:14.527 回答