Как я могу установить cookie, а затем перенаправить в PHP?

StackOverflow https://stackoverflow.com/questions/612034

  •  03-07-2019
  •  | 
  •  

Вопрос

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

if($form_submitted) {
    ...
    setcookie('type_id', $new_type_id, time() + 60*60*24*30);
    header("Location: $url");
    exit;
}

Обратите внимание, что setcookie возвращает true в любом случае, и я не получаю ошибок / предупреждений / уведомлений.

РЕДАКТИРОВАТЬ: я использую Unix / Apache / MySQL / PHP

Это было полезно?

Решение

Если у вас есть человеческие URL-адреса или подпапки (например, www.domain.com/path1/path2/), вы должны установить путь к cookie для /, чтобы он работал для всех путей, а не только для текущего.

if($form_submitted) {
    ...
    setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/');
    header("Location: $url");
    exit;
}

Из руководства по PHP:

  

Путь на сервере, на котором   печенье будет доступно на. Если установлено   '/', файл cookie будет доступен   в пределах всего домена. Если установлено   '/ foo /', файл cookie будет только   доступно в каталоге / foo /   и все подкаталоги, такие как   / foo / bar / домена. По умолчанию   значение - это текущий каталог,   файл cookie устанавливается в.

Другие советы

Я предполагаю, что вы используете IIS? Существует известная ошибка с версиями IIS менее 7 при попытке установить cookie и заголовок местоположения в одном запросе.

http://support.microsoft.com/kb/q176113/

Как вы проверяете, установлен ли файл cookie? Файлы cookie доступны на странице next после их установки.

  

Распространенные ошибки:

     

Файлы cookie не будут видны до следующей загрузки страницы, для которой файл cookie должен быть виден. Чтобы проверить, был ли cookie успешно установлен, проверьте его на следующей странице загрузки, прежде чем истечет срок действия cookie. Время истечения устанавливается через параметр истечения. Хороший способ отладить существование файлов cookie - просто вызвать print_r ($ _ COOKIE);.

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

    header("refresh: 2; url=$url");
    setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/');
    echo "Processing, please wait...";

Используйте относительный URL в заголовке:

@Header("Location: orders_9090_1.php");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top