Работа с сессиями в PHP

Friday, 12 February 2010 | Автор: programmer

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

 

Для начала рассмотрим функции для работы с сессиями. Инициализация сессии происходит вызовом функции session_start():

bool session_start (void)

Данная функция создает и инициализирует уже созданную сессию, переданную через куки или же через $_GET. Эта функция всегда возвращает true. Если пользователь использует ob_gzhandler или ob_start(), то это помогает ему обеспечить правильный вывод информации

 

bool session_register( mixed $name [, mixed $...  ] )

Регистрация новой сессионной переменной происходит при вызове функции session_register(), которая принимает одно или несколько текстовых переменных, значения которых - название будущей сессионной переменной.

 

bool session_unregister (string $name)

Если Вы хотите уничтожить переменную, то используйте session_unregister с передачей в качестве параметра имя сессионнной переменной.

 

Если Вы хотите узнать дату окончания действия кеша или же изменить на новую дату, то Вам необходимо воспользоваться функцией session_cache_expire:

int session_cache_expire ([string $new_cache_expire])

Если $new_cache_expire не задан, то выдается дата окончания действия кеша, в противном случае проставляется новая дата.

 

string session_id ([string $id])

Узнать или установить ID текущей сессии можно с помощью функции session_id(). Если параметр $id не задан, то возвращается ID текущей сессии, в противном случае устанавливается новый ID.

 

bool session_is_registered (string $name)

Когда необходимо узнать, создана ли какая-то сессионная переменная, то можно использовать функцию session_is_registered().

 

В принципе это основные функции работы с сессиями, которые Вы будете использовать.

 

Чтобы обратиться к сессионной переменной, необходимо использовать суперглобальный массив $_SESSION:

echo $_SESSION['name']

Выведен значение переменной, которая была создана функцией session_register("name").

 

Раз с теорией покончили, теперь немного интересных фактов в противостоянии "Cookie vs Session". Камнем преткновения всегда является безопасность использования того или иного способа.

В куках не рекомендуют хранить какую-то конфиденциальную информацию, в частности пароли, а вот сессии для этого подходят достаточно хорошо. Но и тут есть нюансы, если у пользователя отключены куки, то передача id сессии осуществляется через $_GET, или же с включенными куками злоумышленник может своровать куки и вот тут могут быть проблемы, если злоумышленник получит SID (Session ID). Избежать таких проблем можно указывая время жизни сессий, например, 10 минут.

В куках хорошо хранить данные общего характера. Например, у Вас сайт о погоде, пользователя, заходящие на Ваш сайт могут узнать погоду своего города. Вот тут нам и помогут куки. Используя инструментарий GeoIP, можно определить в каком городе находится пользователь и записать эти данные в куки, чтобы при следующем обращении снова не искать город пользователя, а сразу показывать погоду на основании куков пользователя.

Сессии же хороши для хранения какой-то динамической информации, будь то данные о пользователи или же запоминать данные о товарах, которые были добавлены в корзину. Как пример, мы использовали сессии в нашем проекте создания гостевой книги для запоминания секретного кода при добавлении нового сообщения.


 
Tweet


Категория(и): Изучаем PHP
Добавить комментарий
Чтобы оставить комментарий, Вам необходимо зарегистрироваться или авторизироваться