我正在编写一个脚本,允许在我的网站的移动和桌面视图之间切换。我完成它的方法是在用户点击“桌面”时在系统上放置一个cookie,并在用户点击“移动”时删除cookie。
系统第一次使用放置cookie并进行重定向。我的脚本还会读取index.php上的cookie,以便在cookie存在时提供桌面视图。当用户再次点击“移动”时,我会删除cookie并运行“用户代理”检查。
第二次,当我点击“桌面”链接时,未设置cookie并且脚本无法执行。这有什么可能的错误?
感谢您的时间
编辑:我正在通过setcookie创建cookie(“mobile”,“web”,time()+ 31536000,“/”);
通过setcookie删除cookie(“mobile”,“”,time() - 60,“/”);
从HTTP Headers我可以看到第一次执行脚本时传递的Set-Cookie参数,但是在我删除cookie并再次尝试之后,不会传递setcookie参数。
答案 0 :(得分:0)
1:您是否正确设置了cookie的长度?确保使用
将其设置为将来setcookie("Cookie", $value, time()+3600);
2:我还建议,不要删除cookie,为什么不将它变为真或假。这可能会解决与删除有关的错误。
就我个人而言,我从来没有遇到任何类似用途的setCookie问题(移动网站),但我总是只使用mobileEnabled,然后将其设置为true或false,如果它不存在,则PHP默认为任何它们正在使用,如果确实存在,则表示客户端具有首选项并使用它们设置的任何内容。
答案 1 :(得分:0)
来自php.net:
setcookie()定义了一个与其他HTTP头一起发送的cookie。与其他标头一样,必须在脚本的任何输出之前发送cookie(这是协议限制)。
在删除和编写新内容时,您是否确保网站不会生成任何输出 曲奇饼?检查一些(用于调试)echo()语句。我也遇到过这个......
::编辑因为评论::
<?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);
答案 2 :(得分:0)
首先,您应该将代码添加到问题中,以便我们了解您如何设置Cookie。所以我猜错了,并说你还没有设置cookie的路径。
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,但你很幸运。