По умолчанию cookies устанавливаются на один сеанс работы с браузером, однако можно задать для них более продолжительный срок существования. Срок годности устанавливается в секундах относительно начала эпохи. В PHP существуют функции time и mktime для работы с датой и временем, позволяющие переводить текущее время в количество секунд с начала эпохи. Функция time просто переводит текущее системное время в количество секунд, прошедших с начала эпохи: time();
Усовершенствованным вариантом функции time является функция mktime:
int mktime ([int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]])
//установка срока годности cookies:
<?
/* этот cookie действителен в течение 10 мин после создания */
setcookie("name", $value, time() + 600);
/* действие этого cookie прекращается в полночь 25 января 2010 года */
Для удаления cookie надо вызвать функцию setcookie и передать ей имя того cookie, который подлежит удалению: setcookie("name").Другие установленные cookie при этом не удаляются.
Проверить, установлены ли cookie с заданным именем, используют функцию isset(name)
<?php
if (isset($_COOKIE["user"]))
echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
echo "Welcome guest!<br />";
?>
1. Создайте скрипт, сохраняющий в cookie массив, в том числе многомерный, не прибегая к его упаковке в строку.
2. С помощью механизма cookie хранить информацию о вошедшем пользователе на форум из задания в Лекции №9.
Сессии предназначены для хранения сведений о пользователях при переходах между несколькими страницами. При использовании сессий данные сохраняются во временных файлах на сервере.
Сессии очень удобно использовать в таких приложениях как Интернет-магазины, форумы, доски объявлений, когда, во-первых, необходимо сохранять информацию о пользователях на протяжении нескольких станиц, а, во-вторых, своевременно предоставлять пользователю новую информацию.
Протокол HTTP не имеет встроенного способа сохранения состояния между двумя транзакциями. Т. е., когда пользователь открывает сначала одну страницу сайта, а затем переходит на другую страницу этого же сайта, то основываясь только на средствах, предоставляемых протоколом HTTP невозможно установить, что оба запроса относятся к одному пользователю. Т. о. необходим метод, при помощи которого было бы отслеживать информацию о пользователе в течение одного сеанса связи с Web-сайтов. Сеанс представляет собой группу переменных, которые, в отличие от обычных переменных, сохраняются и после завершения выполнения PHP-сценария.
1. Открытие сессии заключается в использовании функции session_start, которая вызывается в начале PHP-сценария: session_start();
Эта функция проверяет, существует ли идентификатор сессии, и, если нет, то создает его. Если идентификатор текущей сессии уже существует, то загружаются зарегистрированные переменные сессии.
2. После инициализации сессии можно сохранять информацию в суперглобальном массиве $_SESSION.
<?php
// Инициируем сессию
session_start();
// Помещаем значение в сессию
$_SESSION['name'] = "value";
// Помещаем массив в сессию
$arr = array("first", "second", "third");
$_SESSION['arr'] = $arr;
// Выводим ссылку на другую страницу
echo "<a href='other.php'>другая страница</a>";
?>
3. Извлечение значения сессионных переменных можно из суперглобального массива $_SESSION.
Результат работы скрипта выглядит следующим образом:
Array
(
[name] => value
[arr] => Array
(
[0] => first
[1] => second
[2] => third
)
)
4. Закрытие сессии
После завершения работы с сессией сначала нужно разрегистрировать все переменные сессии, вызвав функцию unset(): unset($_SESSION["username"]);
А после, удалить сессию вызовом функции session_destroy();
1. Модифицируйте систему определения посетителей online таким образом, чтобы в таблицу session помещалась информация об IP-адресе посетителя, а сама система имела возможность запретить просмотр ресурса сайта с определенного IP-адреса.
2. С помощью механизма session хранить информацию о вошедшем пользователе на форум из задания в Лекции №9.
Ранние версии РНР (вплоть до версии 5) поддерживали объектно-ориентированный подход на недостаточно удовлетворительном уровне. Теперь язык поддерживает объектный подход в достаточной для практического применения степени. Теперь все переменные хранят не объекты, а лишь ссылки на них. Во время копирования таких переменных копируются лишь ссылки, но не сами объекты. Средства для сокрытия данных внутри класса (ключевые слова private, public и protected). Механизм поддержки интерфейсов. Интерфейсы можно в первом приближении рассматривать как средства для обеспечения множественного наследования классов. Поддержка исключений. Деструкторы, автоматически вызываемые при удалении объекта из памяти. Перегрузка операций присваивания значений свойствам объекта, получения значения свойства и вызова несуществующего метода.
Ключевым понятием ООП является класс. Класс можно рассматривать как тип некоторой переменной. Переменная класса (далее будем ее называть объектом класса) обычно имеет набор свойств (значений различных типов) и операций (или методов, функций), которые могут быть с ним проведены. Свойства и методы класса часто называют его членами. Так же, как может существовать много переменных одного и того же типа (например, строкового), не связанных между собой, возможно и наличие в программе множества объектов одного и того же класса, различающихся своими свойствами.
Подход к созданию классов, применяемый в объектно-ориентированных языках, называют инкапсуляцией. Данные, принадлежащие классу, сохраняются в его свойствах, доступ к которым тщательно ограничивается и предоставляется в основном при помощи специальных методов.
Новый класс (тип данных) в программе описывается при помощи ключевого слова class. Внутри класса могут располагаться его свойства (переменные класса) и методы (функции-члены класса).
//пример класса комплексного числа
<?php ## Пример класса,
class Math_Complex {
public $re, $im; // Свойства: действительная и мнимая части,
function add($re, $im) { // Метод: добавить число к текущему значению.
$this->re += $re;
$this->im += $im;
}
?>
Переменная $this всегда существует внутри методов (функций-членов) класса. С ее помощью можно ''добраться" до свойств объекта, для которого вызван метод.
При создании объектов класса, применяется ключевое слово new, за которым следует имя класса:
$obj = new Math_Complex;
Теперь $obj хранит все данные класса — в частности, содержит внутри себя отдельные значения $ге и $im.
Каждый объект имеет свой собственный набор ассоциированных с ним свойств (значений, или переменных) и множество методов (функций- членов). Каждое свойство объекта доступно в программе по его имени. Можно присваивать значение свойству или получать его величину:
// Создаем новый объект класса Math_Complex.
$obj = new Math_Complex;
// Присваивает значение свойствам $ге и $im объекта $obj.
$obj->re = 6;
$obj->im = 10;
// Выводит значение свойства re объекта $obj.
echo $obj->re;
Доступ к свойству осуществляется при помощи оператора -> (стрелка, символ -, за которым идет >).