Таблица sessions
Таблица sessions является системной таблицей Drupal, которая хранит информацию о текущих активных сессиях пользователей. Каждая запись в таблице представляет собой одну сессию, связанную с конкретным пользователем.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
uid |
int unsigned |
Идентификатор пользователя (users.uid), которому принадлежит сессия. Для анонимных пользователей значение равно 0.
|
sid |
varchar(128) |
Уникальный идентификатор сессии. Обычно представляет собой хэш-значение, генерируемое PHP. |
ssid |
varchar(128) |
Secure session ID. Дополнительный идентификатор безопасности, используемый для защиты от атак перехвата сессии. |
hostname |
varchar(128) |
IP-адрес или имя хоста пользователя, с которого была создана сессия. |
timestamp |
int |
Временная метка Unix последнего обращения к сессии. Используется для определения времени бездействия сессии. |
session |
longblob |
Сериализованные данные сессии. Содержит переменные сессии PHP, включая информацию о пользователе и состоянии. |
Как это работает
При каждом запросе к сайту Drupal проверяет наличие cookie сессии у пользователя. Если cookie существует и содержит валидный sid, система загружает соответствующую запись из таблицы sessions и восстанавливает состояние сессии.
Для аутентифицированных пользователей поле uid содержит их идентификатор, что позволяет Drupal определить права доступа и личные настройки. Для анонимных пользователей это поле имеет значение 0.
Поле timestamp обновляется при каждом обращении к сессии. Drupal периодически очищает устаревшие сессии через cron, удаляя записи, которые не обновлялись в течение заданного времени (по умолчанию 86400 секунд или 24 часа).
Данные в поле session хранятся в сериализованном виде и могут содержать различные переменные, установленные модулями Drupal в течение сессии.
Пример SQL-запроса
Получить информацию об активных сессиях конкретного пользователя можно следующим запросом:
SELECT s.sid, s.hostname, s.timestamp, u.name as username
FROM sessions s
LEFT JOIN users u ON s.uid = u.uid
WHERE s.uid = 1
ORDER BY s.timestamp DESC;