Сессии в PHP позволяют сохранять данные пользователя между несколькими запросами, что необходимо для авторизации, корзин покупок и других функций, требующих сохранения состояния.
Перед работой с сессией её необходимо стартовать:
session_start(); // Должно быть первым вызовом, до любого вывода в браузер
Важно:
session_start()
должен вызываться до любого вывода (включая пробелы и HTML)$_SESSION['user'] = [
'id' => 123,
'username' => 'john_doe',
'last_login' => time()
];
Можно сохранять любые типы данных (кроме ресурсов):
if (isset($_SESSION['user'])) {
echo "Добро пожаловать, " . $_SESSION['user']['username'];
}
Удаление одного элемента:
unset($_SESSION['item_key']);
Полная очистка сессии:
$_SESSION = [];
Для корректного завершения:
session_destroy(); // Уничтожает сессию на сервере
setcookie(session_name(), '', time()-3600); // Удаляет cookie сессии
Конфигурация в php.ini или через session_set_cookie_params()
:
session_set_cookie_params([
'lifetime' => 86400, // 1 день
'path' => '/',
'domain' => '.example.com',
'secure' => true, // Только HTTPS
'httponly' => true, // Недоступно для JS
'samesite' => 'Strict' // Защита от CSRF
]);
Всегда проверяйте существование ключей:
$user_id = $_SESSION['user_id'] ?? 0;
Регенерируйте ID сессии при повышении прав:
session_regenerate_id(true);
Используйте HTTPS и secure cookies
// login.php
session_start();
if ($_POST['username'] === 'admin' && $_POST['password'] === 'secret') {
$_SESSION['authenticated'] = true;
$_SESSION['user_role'] = 'admin';
header('Location: dashboard.php');
exit;
}
// dashboard.php
session_start();
if (empty($_SESSION['authenticated'])) {
header('Location: login.php');
exit;
}
echo "Добро пожаловать в админку!";
session_start()
session_start()
вызывается на каждой странице для работы с сессиями в PHP используйте session_start()
, массив $_SESSION
для хранения данных и соблюдайте меры безопасности. Сессии - мощный механизм для сохранения состояния между запросами, но требующий аккуратной реализации.