Как начать сессию и сохранить данные между запросами?php-7

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

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

Перед работой с сессией её необходимо стартовать:

session_start(); // Должно быть первым вызовом, до любого вывода в браузер

Важно:

  • session_start() должен вызываться до любого вывода (включая пробелы и HTML)
  • Вызывает заголовки Set-Cookie для отправки идентификатора сессии (PHPSESSID)

2. Запись данных в сессию

$_SESSION['user'] = [
    'id' => 123,
    'username' => 'john_doe',
    'last_login' => time()
];

Можно сохранять любые типы данных (кроме ресурсов):

  • Строки, числа
  • Массивы
  • Объекты (если их класс определён до старта сессии)

3. Чтение данных сессии

if (isset($_SESSION['user'])) {
    echo "Добро пожаловать, " . $_SESSION['user']['username'];
}

4. Удаление данных

Удаление одного элемента:

unset($_SESSION['item_key']);

Полная очистка сессии:

$_SESSION = [];

5. Завершение сессии

Для корректного завершения:

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
]);

Безопасность

  1. Всегда проверяйте существование ключей:

    $user_id = $_SESSION['user_id'] ?? 0;
    
  2. Регенерируйте ID сессии при повышении прав:

    session_regenerate_id(true);
    
  3. Используйте 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 "Добро пожаловать в админку!";

Ошибки и их решение

  1. Headers already sent - убедитесь, что нет вывода до session_start()
  2. Сессия не сохраняется - проверьте права на запись в директорию сессий
  3. Данные теряются - убедитесь, что session_start() вызывается на каждой странице

Резюмируем:

для работы с сессиями в PHP используйте session_start(), массив $_SESSION для хранения данных и соблюдайте меры безопасности. Сессии - мощный механизм для сохранения состояния между запросами, но требующий аккуратной реализации.