2009-09-07 5 views
0

В настоящее время у меня есть веб-сайт, на котором пользователи могут выбирать собственную тему. После выбора темы создается файл cookie. Файл cookie содержит правильные данные и указывает на правильный файл CSS. По какой-то причине при повторном посещении сайта тема не загружается. Я должен указать, что я новичок в PHP, поэтому это может быть очень простая ошибка. Пожалуйста помоги. Спасибо.PHP - загрузка CSS с помощью cookie, но cookie не читается?

Вот мой код:

<?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" /> 

ответ

6

Вы помещаете строку CSS/Default.css в файл cookie, но затем вы проверяете строку Default от $stylesArr. Измените эту строку:

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

к этому:

$style = $_GET['theme']; 

и это будет хорошо.

Кроме того, я должен предупредить вас об использовании данных непосредственно из $ _GET в вашем приложении. Вы никогда не должны этого делать, потому что это может привести к серьезным проблемам безопасности. Всегда санируйте вход пользователя.

0

установки параметра пути $ в вашем setcookie() вызова Try. Если вы его не установили, по умолчанию будет указан текущий каталог. В этом случае, вы хотите печенье быть по всему сайту, поэтому попробуйте следующее:

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

Вы также должны быть уверены в том, что setcookie() вызова происходит перед любым другим выходом. Если у вас есть это на вашей странице ниже некоторого HTML или любого другого выхода (включая пробелы или что-то другое не между <?php ?> тегами), то setcookie() не будет работать.

+0

Хорошо, я просто попытался, что вы сказали, а также убедились, что код PHP был на вершине, но все-таки не повезло ... – user

0

Вам нужно будет убедиться, что вы уже вызвали session_start() прямо в начале вашего скрипта.

+0

Он использует свой собственный файл cookie, а не cookie сеанса. Этот ответ неверен. – OIS

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'; 
Смежные вопросы