Что такое PHP-сессия?
Переменные сессии хранят информацию об одном пользователе и доступны на всех страницах одного приложения.
Когда вы работаете с приложением, вы открываете его, вносите изменения, а затем закрываете. Это очень похоже на сессию. Компьютер знает, кто вы. Он знает, когда вы запускаете приложение и когда закрываете его. Но в интернете есть одна проблема: веб-сервер не знает, кто вы и что вы делаете, потому что HTTP-адрес не сохраняет состояние.
Переменные сессии решают эту проблему, сохраняя информацию о пользователе для использования на нескольких страницах (например, вход пользователя, корзины покупок и т.д.).
По умолчанию переменные сессии существуют до тех пор, пока пользователь не закроет браузер.
Совет: Если вам нужно постоянное хранение, вы можете сохранить данные в базе данных.
Функции PHP-сессий
Наиболее важные функции сессий:
session_start()- Запускает новую сессию$_SESSION- Хранит и предоставляет доступ к переменным сессииunset()- Удаляет определенную переменную сессии (например, unset($_SESSION["favcolor"]))session_destroy()- Уничтожает все данные, связанные с текущей сессиейsession_unset()- Освобождает все переменные сессии
Запуск PHP-сессии
Сессия запускается с помощью функции session_start().
Примечание: Функция session_start() должна вызываться в начале каждого PHP-скрипта, до любого HTML-вывода или пробелов!
Суперглобальная переменная PHP $_SESSION используется как для хранения, так и для доступа к переменным сессии, доступным текущему скрипту.
Теперь давайте создадим PHP-страницу с именем "test.php". На этой странице мы запускаем новую PHP-сессию и устанавливаем некоторые переменные сессии:
Пример
<?php
// Запускаем сессию
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Устанавливаем переменные сессии
$_SESSION["favcolor"] = "зеленый";
$_SESSION["favanimal"] = "кот";
echo "Переменные сессии установлены.";
?>
</body>
</html>
Попробуйте сами »
Получение значений переменных PHP-сессии
Далее мы создаем другую PHP-страницу с именем "test2.php". На этой странице мы получим доступ к информации сессии, которую установили на первой странице ("test.php").
Пример
<?php
// Возобновляем сессию
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Выводим переменные сессии, установленные на предыдущей странице
if(isset($_SESSION["favcolor"])) {
echo "Любимый цвет - " . $_SESSION["favcolor"] . ".<br>";
echo "Любимое животное - " . $_SESSION["favanimal"] . ".";
} else {
echo "Данные сессии не найдены.";
}
?>
</body>
</html>
Попробуйте сами »
Как это работает? Как он узнает, что это я?
Когда пользователь посещает страницу, которая вызывает функцию session_start(), PHP проверяет наличие существующего идентификатора сессии в браузере пользователя. Если идентификатор сессии не найден, PHP генерирует уникальный случайный идентификатор.
Этот идентификатор (хранящийся в куки с именем PHPSESSID) — единственная информация, хранящаяся на стороне клиента. Данные сессии надежно хранятся на сервере, обычно во временном файле.
При следующей загрузке страницы сервер получает идентификатор сессии из куки и использует его для загрузки данных сессии в суперглобальную переменную PHP $_SESSION. Затем данные сессии становятся доступными текущему скрипту во всех областях видимости.
Другой способ показать все значения переменных сессии для пользовательской сессии — использовать print_r($_SESSION):
Пример
<?php
// Возобновляем сессию
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
print_r($_SESSION);
?>
</body>
</html>
Попробуйте сами »
Изменение переменной PHP-сессии
Чтобы изменить переменную сессии, просто перезапишите ее:
Пример
<?php
// Возобновляем сессию
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// чтобы изменить переменную сессии, просто перезапишите ее
$_SESSION["favcolor"] = "желтый";
print_r($_SESSION);
?>
</body>
</html>
Попробуйте сами »
Уничтожение PHP-сессии
Далее мы создаем другую PHP-страницу с именем "logout.php". Здесь мы удалим все переменные сессии и уничтожим сессию (с помощью session_unset() и session_destroy()):
Пример
<?php
// Возобновляем сессию
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
//
Удаляем все переменные сессии
session_unset();
//
Уничтожаем сессию
session_destroy();
echo "Вы вышли из системы.";
?>
</body>
</html>
Попробуйте сами »
PHP-сессии против Куки
Вот ключевые различия между сессиями и куки:
| Сессия (Session) | Куки (Cookies) |
|---|---|
| Данные хранятся на сервере | Данные хранятся в браузере |
| Истекает при закрытии браузера или после бездействия пользователя в течение некоторого времени | Может иметь длительный срок действия |
| Более безопасна, так как данные не хранятся в браузере | Менее безопасна, так как данные хранятся в браузере |
| Более эффективна, не требует постоянной передачи данных между браузером и сервером | Менее эффективна, так как данные отправляются с каждым запросом |