我尝试使用PHP创建一个基于cookie的主题切换器,并使用这个来创建cookie:
$t = $_GET["t"];
if($t == "dark" || "light" || "mixed") {
setcookie("theme", $t, time() + 31556926, "/");
} elseif(!isset($t) and !isset($_COOKIE["theme"])) {
setcookie("theme", "dark", time() + 31556926 , "/");
}
if(isset($_COOKIE["theme"])) {
echo "<body style=\"background:url(/imgs/" . $_COOKIE['theme'] . ".gif) top left repeat\">";
} else {
echo "<body style=\"background:url(/imgs/dark.gif) top left repeat\">";
}
但这似乎不起作用,它重新加载页面并设置cookie,但有一个奇怪的属性需要重新加载页面再次才能更改背景,并且只持续会议。除此之外,当你返回没有?t=light
的index.php时,它会停留,但是当你重新加载时它会消失。我无法弄清楚它应该以这种方式行事。
答案 0 :(得分:0)
我认为你有语法错误。只是试试..
$t = $_GET["t"];
if($t == "dark" || $t == "light" || $t == "mixed") {
setcookie("theme", $t, time() + 31556926, "/");
} elseif(!isset($t) && !isset($_COOKIE["theme"])) {
setcookie("theme", "dark", time() + 31556926 , "/");
}
if(isset($_COOKIE["theme"])) {
echo "<body style=\"background:url(/imgs/" . $_COOKIE['theme'] . ".gif) top left repeat\">";
} else {
echo "<body style=\"background:url(/imgs/dark.gif) top left repeat\">";
}
答案 1 :(得分:0)
使用strtotime()
:
setcookie('theme', 'dark', strtotime('+1 year'), '/');
顺便说一句,cookies应该高于其他所有 - 它是标题的一部分。你应该把它放在首位,否则 - 它可能会产生错误(如果你想隐藏错误,只需在@
之前插入setcookie
)。
答案 2 :(得分:0)
不确定是否有最大值,但是我发现有几个人认为它受到unixtime的限制,即2038年之后没什么。但是,正如其他人所指出的那样,没有必要让它超过10年因为浏览器/计算机将在10年内到期并重新加载或替换等。我的参考: https://www.quora.com/What-is-the-limit-to-a-persistent-cookies-expiry-date
与此同时,我发现了有关尺寸和数量限制的信息: http://browsercookielimits.squawky.net/
答案 3 :(得分:0)
问题在于,正如您在评论中所说,您在其他代码下面有setcookie。
在setcookie之前你不能有任何输出 尽可能远地移动问题中的代码。
见这里:http://php.net/manual/en/function.setcookie.php
如果在调用此函数之前存在输出,则setcookie()将失败并返回FALSE。
编辑;并尽可能地使用<HTML>
标记
EDIT2;关于isset。
If(isset($_GET["t"])){
$t = $_GET["t"];
}Else{
$t = "dark";
}
if($t == "dark" || "light" || "mixed") {
setcookie("theme", $t, time() + 31556926, "/");
} elseif(!isset($t) and !isset($_COOKIE["theme"])) {
setcookie("theme", "dark", time() + 31556926 , "/");
}
if(isset($_COOKIE["theme"])) {
echo "<body style=\"background:url(/imgs/" . $_COOKIE['theme'] . ".gif) top left repeat\">";
} else {
echo "<body style=\"background:url(/imgs/dark.gif) top left repeat\">";
}
很难在电话上把它弄好但是你明白了。