PHP cессии

Содержание
Введение
Для чего используются сессии
Где настраивать сессии
session.configuration: Конфигурации
Функции
Пример .htaccess
session_start(): Начать сессию
Окончание сессии

Введение

HTTP протокол сам по себе stateless.

Сессии нужны для хранения информации о пользователях. Они используют cookie делают примерно то же что и cookies но лишены большинства их недостатков

Сессии это инструмент для управления состоянием приложения.

Как и $_COOKIE $_SESSION это суперглобальная переменная ( массив ) , которая хранится на веб сервере.

У каждой сессии есть уникальный номер Session ID или SID

Сессия должна быть начата до отправки данных браузеру.

Данные на сервере и куки в браузере работают в связке. SID хранится в куки.

Сервер «помнит» пользователя пока работа с сайтом ведётся в сессии.

Сессия удаляется автоматически при закрытии браузера. рассмотрим эти задачи в следующем параграфе

Что можно сделать с помощью сессий

Пример

Из обычной жизни: когда вы получаете счёт за электричество, там содержится много разной информации. Но чтобы оплатить его, нужен только номер счёта. Вводите номер счёта и всё остальное подтянется с сервера.

Пример запроса от клиента

Request 1 GET /homepage.php HTTP/1.1 Host: eth1.ru Accept: */*

Рекомендуется отпрвлять Session ID с сервера в виде куки. Другой вариант: Session ID можно передать в URL параметре.

Response 1 HTTP/1.1 200 OK Content-type: text/html Set-Cookie: SID

Запрос к другой странице будет уже с SID

Request 2 GET /aboutus.php HTTP/1.1 Host: eth1.ru Cookie: SID Accept: */*

Примерно таким образом куки позволяют запоминать пользовательские настройки

Где настраивать сессии

Настроек более 40, способов их задавать тоже несколько.

Первое место, где можно задавать настройки сессий это файл php.ini .

С помощью php.ini можно изменить настройки для всего PHP сервера.

В Apache можно использовать файл httpd.conf для всего сервера и .htaccess для отдельных директорий.

Возможно, вы уже пользовались .htaccess для перенаправления запросов

Следующий способ задания настроек - функция ini_set(). Её нужно будет вызывать со всеми скриптами, где используются сессии, поэтому способ не очень эффективный.

Session Configurations Options

Полный список доступен на http://php.net

session.auto_start: автоматически начинает сессию.

По умолчанию выключена.

session.name: задаёт имя текущей сессии и сессионной куки

По умолчанию PHPSESSID.

Может быть изменено с помощью функции session_name()

session.save_path: путь по которому сохраняется информация о сессии

По умолчанию tmp директория сервера.

session.gc_maxlifetime: максимальное время жизни

По умолчанию 1440 секунд (24 минуты).

session.cookie_lifetime: время жизни куки, которая отправляется браузеру. По сути это значение, которое мы добавляем к time() когда задаём expires

По умолчанию 0.

session.cookie_path: задаёт cookie path

По умолчанию '/'.

session.cookie_secure: задаёт secure

Если включить то куки будут отправляться только по HTTPS.

По умолчанию выключена.

session.use_strict_mode: если включить то SID которые созданы не сервером будут отклонены.

По умолчанию выключена.

session.cookie_httponly: задаёт httponly

Если включить куки будет доступна только по HTTP (и HTTPS). То есть JavaScript или bbscript не смогут получить к куки доступ

По умолчанию выключена.

session.use_cookies: указывает нужно ли сохранять SID в cookies на стороне клиента.

По умолчанию включена.

session.use_only_cookies: заставляет сессию использовать только cookie для хранения SID. Работает совместно с session.use_cookies

По умолчанию включена.

session.use_trans_sid: контролирует использование «прозрачных» SID

Если включить - SID будет добавляться как параметр прямо в URL. Например:

https://www.eth1.ru/?SID

Эту опцию обычно включают только тогда, когда нет поддержки cookies

По умолчанию выключена.

Пользуйтесь trans sid с осторожностью так как это может поставить под угрозу безопасность пользователя.

Подробности на http://php.net/session.use-trans-sid

session.cache_limiter: указывает способ контроля за кэшем во время сессии.

Доступные варианты:

По умолчанию nocache.

Для сессий с аутентификацией нужно, чтобы кэширование в браузере было отключено.

Подробнее:

http://php.net

http://php.net

session.cookie_samesite: контролирует доступности куки в кроссдоменных запросах.

Доступные варианты: Lax и Strict

Кросдоменные запросы могу быть не только от злоумышленников. Их может делать ваш сайт с разных поддоменов. Либо вы можете следить за перемешением пользователя между своими проектами.

Функции

Полный список доступен на php.net

session_start(): начинает сессию и делает доступной переменную $_SESSION.

session_name(): переименовывает сессию.

Меняет значение, заданное с помощью функции session.name.

session_id(): получает или устанавливает текущий session id

set new session ID: session_id('<new SID>')

session_destroy(): удаляет всю информацию записанную в сессию

Пример .htaccess

Настройки вашего сервера могут отличаться, это просто пример

# Use php_flag for boolean values, # php_flag session.auto_start off php_flag session.use_cookies on php_flag session.use_only_cookies on php_flag session.use_trans_sid off php_flag session.use_strict_mode on # Use php_value for non-boolean values # Enclose values that contain punctuation in quotes. php_value session.cache_limiter nocache php_value session.cookie_samesite Lax php_value session.name AOSESSID php_value session.save_path ./tmp # Cookie settings php_value session.cookie_path '/' php_value session.cookie_lifetime 0 php_flag session.cookie_httponly on php_flag session.cookie_secure on

Инициализация сессии

Сессия начинается с помощью функции session_start()

Эта функция должна быть включена во все скрипты, в которых вам нужно использовать сессии.

Сперва выполняет проверку наличия активной сессии. Если сессии нет - начинает новую.

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

session_start(); $_SESSION['username'] = 'Andrei'; echo isset($_SESSION['username']) ? $_SESSION['username'] : 'Not available';

Если последняя строка вам непонятна - прочитайте статью

«Тернарный оператор в PHP»

Демонстрацию работы session_start() в вашем браузере вы можете сделать на этой странице

Посмотреть куки можно в Chrome DevTools → Application → Cookies

Выберите eth1.ru или eth1.ru и найдите AOSESSID

Изучить файл с данными о сессии можно в директории, которую вы указали в php_value session.save_path

В моём .htaccess указан

php_value session.save_path ./tmp

Поэтому я смотрю содержимое там

cat ./tmp/sess_d510566d6fc7dcbf9a9c21eb29d846ce

username|s:6:"Andrei";

Удаление сессии

Сессия истекает когда закрывается браузер, наступает таймаут, её явно делают просроченной.

Если не удалить данные, они так и будут лежать на сервере - это небезопасно.

Уничтожение сессии включает в себя:

session_destroy()

Удаляет все данные привязанные к сессии.

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

Не удаляет куки.

Возвращает boolean - удалились данные или нет

Если использовать только session_destroy() можно переиспользовать $_SESSION просто вызвав session_start()

unset()

unset() это стандартная PHP функция, которую использую не только с сессиями.

Чтобы очистить username нужно выполнить

unset($_SESSION['username']);

Чтобы очистить всё можно обойтись без unset()

$_SESSION = [];

Пример полного удалёния сессии

$_SESSION = []; $params = session_get_cookie_params(); $options = array('lifetime' => time() - 60); setcookie(session_name(), '', $options); session_destroy();

Похожие статьи
Программирование на PHP
Массивы в PHP
Циклы в PHP
Дата и время в PHP - основы
Как отобразить время различных часовых поясов PHP
Как вставить переменную в ссылку PHP
gettype(): определить тип переменной PHP
json_decode
Как получить ширину экрана с помощью PHP
Вызов функции из другого файла
Premature end of chunk coded message body: closing chunk expected
Сгенерировать неповторяющиеся случайные числа PHP
Узнать свой HTTP_USER_AGENT
Сравнить две даты
Классы в PHP 8
Комментарии в PHP
substr: обрезать строку
Запросы к REST API на PHP
$_SERVER['REQUEST_URI']: текущая url
Работа с базами данных
Работа с cookies
PHP sessions
Аутентификация и авторизация в PHP 8
switch, тернарный
try catch
Мои скрипты
PHP_errors.log Beget
Разбор ошибок

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: