PHP - 使用cookie加载CSS,但是没有读取cookie?

时间:2009-09-07 07:19:25

标签: php css cookies

我目前有一个网站,用户可以在其中选择自定义主题。选择主题后,会创建一个cookie。 cookie包含正确的数据并指向正确的CSS文件。出于某种原因,在重新访问该网站时,主题未加载。我应该指出我是PHP的新手,所以这可能是一个非常容易犯的错误。请帮忙。谢谢。

这是我的代码:

<?php
$stylesArr = array('Default', 'Black', 'Pink', 'Green', 'Red');
if(isset($_GET['theme']) && in_array($_GET['theme'], $stylesArr)) {
    $style = 'CSS/' . $_GET['theme'] . '.css';
    setcookie("theme", $style, time()+(60*60*24*30));
} else {
    if(isset($_COOKIE['theme']) && in_array($_COOKIE['theme'], $stylesArr)) {
        $style = 'CSS/' . $_COOKIE['theme'] . '.css';
    } else {
        $style = 'CSS/Default.css';
    }
}
?>
<link rel="stylesheet" href="<?php echo $style>" type="text/css"media="screen" />

4 个答案:

答案 0 :(得分:6)

您正在将字符串CSS/Default.css放入Cookie中,但是您正在检查来自Default的字符串$stylesArr。改变这一行:

$style = 'CSS/' . $_GET['theme'] . '.css';

到此:

$style = $_GET['theme'];

,没关系。

另外,我必须提醒您在应用程序中直接使用来自$ _GET的数据。你永远不应该这样做,因为它可能导致严重的安全问题。始终清理用户输入。

答案 1 :(得分:0)

尝试在setcookie()来电中设置$ path参数。如果未设置,则默认为当前目录。在这种情况下,您希望cookie在整个网站范围内,请尝试以下操作:

setcookie("theme", $style, time()+(60*60*24*30), '/');

您还需要确保在任何其他输出之前发生<{1}}调用。如果您的页面中有一些HTML或任何其他输出(包括空格或setcookie()标记之间的任何内容),那么<?php ?>将无效。

答案 2 :(得分:0)

您需要确保在脚本开头就已经调用了session_start()

答案 3 :(得分:0)

关闭主题,但我会更像这样编写代码:

define('MONTH_IN_SECONDS', 2592000);
$themes = array('Default', 'Black', 'Pink', 'Green', 'Red');
$theme = reset($themes); //first value is default
if (isset($_GET['theme']) && in_array($_GET['theme'], $themes, true)) {
    $theme = $_GET['theme'];
    setcookie("theme", $theme, time()+ MONTH_IN_SECONDS);
} elseif (isset($_COOKIE['theme']) && in_array($_COOKIE['theme'], $themes, true)) {
    $theme = $_COOKIE['theme'];
}
$themeURL = 'CSS/' . $theme . '.css';