Setcookie не работает

Setcookie не работает

Добрый день! Вот решил поделиться своим открытием насчёт функции Setcookie в PHP. При генерации страницы мне нужно чтобы у клиента установился определённое значение в cookie. Поковырявшись с Setcookie и убедившись что оно не работает, я обычно бросал это неблагодарное дело и пользовался JavaScript`ом, однако если у клиента отключены скрипты, то такой фокус не прокатит. Так почему же Setcookie не работает?

В основном это две причины: очевидная и не очень.

Очевидная причина:

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

Да, это очень важное замечание, поскольку, проигнорировав его, вы получите сообщение об ошибке следующего содержания: Cannot modify header information — headers already sent by (output started at… Типа невозможно изменить заголовки страницы, так как они уже были отправлены.

В той же инструкции приведён пример использования функции Setcookie на PHP:

<?php
 $value = 'что-то где-то';
 setcookie("TestCookie", $value);
 setcookie("TestCookie", $value, time()+3600);  /* срок действия 1 час */
 setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);
?>

Однако, выполнение такого php-скрипта на сервере — привело к ошибкам:

Warning: Cannot modify header information — headers already sent by (output started at Z:\…\test.php:1) in Z:\…\test.php on line 4

Warning: Cannot modify header information — headers already sent by (output started at Z:\…\test.php:1) in Z:\…\test.php on line 5

Warning: Cannot modify header information — headers already sent by (output started at Z:\…\test.php:1) in Z:\…\test.php on line 6

Как же так??? Ведь это пример с официального сайта! Вот тут-то виновата вторая — не очевидная причина.

Не очевидная причина:

Очень просто — кодировка php-файла должна быть UTF-8 без BOM

setcookie

(Просмотрено 2 616 раз, 1 раз за сегодня)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *