Как использовать переменную в setcookie ()? - PullRequest
0 голосов
/ 16 марта 2009

Я хочу передать переменную, установленную пользователем, в функцию setcookie. Я хотел бы позволить пользователю изменить цвет некоторых частей веб-сайта. пока информация о цвете отправляется на сервер с $_SESSION['colorcode'], и я хотел бы добавить ее и к setcookie, чтобы при следующем входе пользователя на сайт его / ее цвет был там. У меня есть этот код:

setcookie(
    'colorcode',
    $_SESSION['colorcode'],
    time() + 60 * 60 * 24 * 30,
    '',
    '',
    false,
    true
);

Я бы хотел сохранить значение переменной в cookie, но оно работает только для сеанса. что случилось? как это сделать, чтобы цвет был при входе пользователя? Я ищу другой способ, чем хранить его в базе данных или файле.

Ответы [ 4 ]

1 голос
/ 16 марта 2009

Читали ли вы значение из файла cookie в начале следующего сеанса? Настройка cookie выглядит хорошо, но я думаю, что последние параметры могут быть опущены.

setcookie("colorcode", $_SESSION['colorcode'], time()+3600*24*30, '/');

Возможно, даже путь ('/') является необязательным. Но это только устанавливает печенье. Вы должны прочитать данные обратно, когда пользователь вернется на ваш сайт в следующий раз.

if ( !isset($_SESSION['colorcode']) and isset($_COOKIE['colorcode']) ) {
    if ( preg_match('/^#?[0-9a-fA-F]{6}$/', $_COOKIE['colorcode']) ) {
        $_SESSION['colorcode'] = $_COOKIE['colorcode'];
    } else {
        // bad value... delete cookie if you like
    }
}

Если в сеансе нет colorcode, но значение cookie существует, данные проверяются, и если это действительный шестизначный шестнадцатеричный цветовой код, то значение вставляется в сеанс. Проверка необходима, потому что cookie - это данные, которые приходят от пользователя и поэтому потенциально злонамеренные.

0 голосов
/ 16 марта 2009

Это должно работать просто отлично:

setcookie("colorcode",$_SESSION['colorcode'],time()+60*60*24*30); 

Просто убедитесь, что вы выводите его в заголовках, я думаю:

setcookie () определяет cookie для отправлено вместе с остальной частью HTTP заголовки. Как и другие заголовки, печенье должен быть отправлен до любого вывода из ваш сценарий (это протокол ограничение). Это требует, чтобы вы сделать вызов этой функции до любой вывод, в том числе и теги, а также любые пробелы.

Вы получаете ошибки?

0 голосов
/ 16 марта 2009

поскольку функции, связанные с cookie (setcookie (), ...) работают с заголовками HTTP, вы должны использовать их перед отправкой любого вывода клиенту но это не означает, что эти функции должны появляться в начале вашего кода. просто убедитесь, что ничего не было отправлено. даже один символ пробела в начале вашего файла за пределами

0 голосов
/ 16 марта 2009

Попробуйте проверить это:

setcookie('colorcode',$_SESSION['colorcode'],time()+60*60*24*30);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...