Сессии в PHP - где и как лучше их использовать?

Сессии в PHP - где и как лучше их использовать?

Сессии и Cookie в PHP используются для сохранения временной информации которая доступна в других скриптах других файлах. Нужно понимать разницу между Session и Cookie, т.к. они выполняет как бы ту же функцию по хранению временных данных, но применять их стоит в зависимости от задачи. Стоит учесть один нюанс, cookie могут работать сами по себе (если, конечно, пользователь не отключил поддержку cookie в браузере). Сессии не могут работать без cookie, т.к. для сессии создается своя cookie где хранится SESSION_ID пользователя.

Где можно использовать Cookie?

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

Cookie лучше использовать в скриптах которые не создадут проблем сайту и его пользователям. Пользователь имеет доступ к данным из cookie и он может их редактировать. Никогда не пользуйтесь cookie в хранение важных данных.

Криворукость администраторов и Cookie!

Встретил однажды самописный сайт одного программиста, прошел регистрацию зашел в личный кабинет и стал смотреть функционал. Мне захотелось узнать какие данные сайт хранит у меня в браузере. Открыл браузер Opera, просмотрел cookie для этого домена и улыбнулся. После аутентификации, сайт добавил cookie с названием user и значением 75, где 75 это был мой ID в базе данных. Долго не думая сменил мой ID на ID администратора, его ID был 5.

Обновил страницу и я получил доступ к админке сайта, появились дополнительные пункты в меню (Добавить статью, Пользователи...) вот так обычной подменной значении я получил права администратора на сайте не зная пароля админа.

Ситуация была бы сложнее если бы администратор хранил в cookie user не ID пользователя а хэш вроде md5( sha1($username). ':' . sha1($password) ). В данном случае, мне нужно было знать пароль администратора и алгоритм шифровки чтобы получить доступ к админе, а так мне нужен был только его ID который интуитивно понятно, что он в диапазоне от 1 до 10.

В чем приоритет Session перед Cookie?

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

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

Применяем сессии в работе

Чтобы сессии начали работать, нужно вызвать их в начале скрипта с помощью функции session_start(); Данная функция создает для пользователя свой уникальный идентификатор который определяет временный файл сессии для каждого пользователя в частности.

<?php
session_start();
?>

напишем небольшой пример, отправим данные из одного скрипта в другой через глобальный массив $_SESSION. Посмотрим небольшой скрипт аутентификации.
Файл: login.php

<?php
session_start();
$auth = True;

if($auth != True) {
	echo 'Логин или пароль введен неправильно!';
} 
 else {
	// Логин пользователя
 	$_SESSION['username'] = 'RedRabbit';
	// Дата и время последнего входа
	$_SESSION['auth_datetime'] = date('Y-m-d H:i:s');
 }
?>

Данные уже сохранились в наши сессии, теперь они доступны в других участках нашего сайта. Создаем новый файл user.php и там проверяем если пользователь прошел авторизацию и выводим дату последнего входа.
Файл: user.php

<?php
start_session();

// Проверяем если значение клюдча username в массиве $_SESSION не является пустой
if(isset($_SESSION['username']) and !empty($_SESSION['username'])) {
	echo 'Здравствуйте, ' . $_SESSION['username'];
	echo '<br>';
	echo 'Ваш последний вход на сайт: ' . $_SESSION['auth_datetime'];
}
?>

Результат работы

Здравствуйте, RedRabbit
Ваш последний вход на сайт: 2013-04-22 21:02:58

Сессии имеют фиксированный срок жизни, его можно редактировать в php.ini чтобы увеличить их срок жизни нужно редактировать следующие переменные (время указывается в секундах).

session.gc_maxlifetime = 10800
session.cookie_lifetime = 10800
Понравилась статья? Поделиться с друзьями:
Путь программиста