0

我正在编写一个脚本,该脚本允许在我的网站的移动视图和桌面视图之间切换。我完成它的方法是在用户单击“桌面”时在系统上放置一个 cookie,并在用户单击“移动”时删除 cookie。

系统第一次使用放置的 cookie 并发生重定向。如果 cookie 存在,我的脚本还会读取 index.php 上的 cookie 以提供桌面视图。当用户再次点击“Mobile”时,我删除了 cookie 并运行 USER AGENT 检查。

第二次,当我单击“桌面”链接时,未设置 cookie,脚本无法执行。这可能是什么错误?

谢谢你的时间

编辑:我正在通过 setcookie("mobile", "web",time()+31536000, "/"); 创建 cookie

通过 setcookie("mobile", "",time()-60, "/"); 删除 cookie

从 HTTP 标头中我可以看到第一次执行脚本时传递了 Set-Cookie 参数,但是在我删除 cookie 并重试后,未传递 setcookie 参数。

4

3 回答 3

0

From php.net:

setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction).

Have you made shure that you website doesn't generate any output when deleting and writing the new cookie? Check for some (for debugging) echo() statements. I've been running into this as well...

:: EDIT because of comment ::

<?PHP

// write cookie
setcookie("TestCookie", "some value", time()+3600);

// expire coockie (delete)
setcookie("TestCookie", "some value", time()-1);

// write cookie
setcookie("TestCookie", "some value", time()+3600);
于 2011-07-13T13:44:00.427 回答
0

首先,您应该将代码添加到您的问题中,以便我们可以看到您是如何设置 cookie 的。所以我在胡乱猜测,说你还没有为 cookie 设置路径。

来自php.net 文档

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

第四个参数是 $path 并且默认是设置 cookie 的当前目录。这意味着,我不得不再次猜测,如果你在一个目录中/desktop并且你设置了 cookie,它只适用于那个目录。一旦发生重定向并且您在其中,让我们猜测/mobile您的 cookie,虽然已设置,但不适用。如果您希望 cookie 在所有路径(即域)中可见,您已将路径设置为/显式。当然,除非您将 cookie 设置在根目录,但您很幸运。

于 2011-07-13T14:41:16.730 回答
0

1:你是否正确设置了cookie的长度?确保将其设置为未来使用

setcookie("Cookie", $value, time()+3600);

2:我还建议不要删除cookie,为什么不将其设为真或假。这可能会解决您与删除有关的错误。

就我个人而言,在与您的(移动网站)类似的用法中,我从来没有遇到过 setCookie 的任何问题,但我总是只使用 mobileEnabled,然后将其设置为 true 或 false,如果它不存在,则 PHP 默认为他们正在使用的任何东西,如果它确实存在,则意味着客户端有偏好并使用他们设置的任何内容。

于 2011-07-13T13:26:54.207 回答