Подтвердить что ты не робот

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

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

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

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

EDIT: Я использую Unix/Apache/MySQL/PHP

4b9b3361

Ответ 1

Если у вас есть человеческие 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 будет доступен. Если установлено значение '/', cookie будет доступен во всем домене. Если установлено значение '/foo/', cookie будет только доступно в каталоге /foo/ и все подкаталоги, такие как /foo/bar/ домена. По умолчанию value - текущий каталог, который файл cookie устанавливается.

Ответ 2

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

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

Ответ 3

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

Общие ошибки:

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

Ответ 4

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

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

Ответ 5

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

@Header("Location: orders_9090_1.php");