Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
php учебник_весь.doc
Скачиваний:
8
Добавлен:
21.09.2019
Размер:
2.06 Mб
Скачать

Пример простого приложения с cookies

Давайте создадим простой сценарий, подсчитывающий при помощи cookies количество обращений посетителя к странице.

В cookie с именем counter будет храниться число посещений страницы пользователем:

<?

$counter++;

setcookie("counter",$counter);

echo("Вы посетили эту страницу $counter раз");

?>

Результат выполнения сценария на рис.:

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

Рассмотрим этот вопрос подробнее, для чего модифицируем код, приведенный в листинге, поместив перед установкой cookie текст:

Если здесь поместить текст, то возникнет ошибка, так как

будет послан заголовок Content-type: text/html.

<?

$counter++;

setcookie("counter",$counter);

echo("Вы посетили эту страницу $counter раз");

?>

Как видно из рис., при выполнении этого сценария выводится сообщение об ошибке:

Заметим, что в этих листингах мы обращаемся к переменной $counter, в которой хранится значение cookie, как к глобальной, что требует наличия включенной директивы register_globals. Если эта директива отключена, то значение, хранящееся в cookie можно получить через глобальные массивы $HTTP_COOKIE_VARS["name"] и $_COOKIE["name"]:

<?

$_COOKIE['counter']++;

setcookie("counter",$counter);

echo 'Вы посетили эту страницу '.$_COOKIE['counter'].' раз';

?>

Поскольку некоторые пользователи отключают cookie в настройках своих браузеров, для корректной работы, в приложение, использующее cookies, необходимо помещать код, проверяющий включены ли cookies у посетителя, и, если нет, то сообщающий ему о необходимости включить cookie:

<?

if(!$cookie)

{

/* посылаем заголовок переадресации на страницу,

с которой будет предпринята попытка установить cookie */

header("Location: $PHP_SELF?cookie=1");

/* устанавливаем cookie с именем "test" */

setcookie("test","1");

}

else

{

if(!$test)

{

echo("Для корректной работы приложения необходимо включить cookies");

}

else

{

/* cookie включены, переходим на нужную страницу */

header("Location: http://localhost/test1.php");

}

}

?>

Установка срока годности cookies

По умолчанию cookies устанавливаются на один сеанс работы с броузером, однако можно задать для них более продолжительный срок существования. Это очень удобное и полезное свойство, поскольку в этом случае пользователю не нужно предоставлять свои данные вновь при каждом посещении сайта.

Как уже говорилось, срок годности устанавливается в секундах относительно начала эпохи. В PHP существуют функцииtime и mktime для работы с датой и временем, позволяющие переводить текущее время в количество секунд с начала эпохи. Функция time просто переводит текущее системное время в количество секунд, прошедших с начала эпохи:

time

Синтаксис:

time();

Усовершенствованным вариантом функции time является функция mktime:

mktime

Синтаксис:

int mktime ([int hour [, int minute [, int second [, int month [, int

day [, int year [, int is_dst]]]]]]])

Аргумент is_dst этой функции определяет, попадает ли эта дата в период летнего времени и может принимать следующие значения:

  • -1 (По умолчанию. Означает, что свойство не задано);

  • 0 (Временной интервал не приходится на период летнего времени);

  • 1 (Временной интервал приходится на период летнего времени).

Примеры установки сроки годности cookies:

<?

/* этот cookie действителен в течение 10 мин после создания */

setcookie("name", $value, time() + 600);

/* действие этого cookie прекращается в полночь 25 января 2010 года */

setcookie("name", $value, mktime(0,0,0,01,25,2010));

/* действие этого cookie прекращается в 18.00 25 января 2010 года */

setcookie("name", $value, mktime(18,0,0,01,25,2010));

?>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]