Когда мы видим страницу сайта в своем браузере, PHP скрипт этой страницы уже давно отработал и забыл о нас. Поэтому, если мы переходим с одной страницы сайта на другую - PHP скрипт не может запомнить данные с предыдущей страницы, например, значения переменных.
Однако, такой механизм очень нужен, хотя бы для того, чтобы запоминать выбор пользователя или то, что пользователь был авторизован.
В PHP для хранения данных пользователя между страницами сайта предназначены сессии. Мы можем записывать какую-либо информацию в сессию и считывать ее оттуда в следующем запуске этого или другого скрипта сайта. С помощью сессии можно реализовать авторизацию пользователей, корзину интернет-магазина и другое.
Инициализируем сессию
Чтобы записать что-то в сессию ее сначала
нужно инициализировать с помощью функции
session_start
:
<?php
session_start();
?>
После инициализации мы можем записать что-нибудь
в сессию или прочитать что-нибудь оттуда.
Это делается с помощью суперглобального массива
$_SESSION
.
Давайте попробуем на практике. Сделаем файл
test1.php
и разместим в нем следующий код:
<?php
session_start();
$_SESSION['test'] = 'abcde'; // пишем в сессию
?>
А в файле test2.php
- следующий код:
<?php
session_start();
echo $_SESSION['test']; // читаем из сессии
?>
Теперь для начала откройте в браузере файл
test1.php
, а потом test2.php
.
При открытии второго файла в браузере выведется
то, что было записано в сессию в первом файле.
Сделайте два файла. При запуске первого файла запишите в сессию два числа, а при запуске второго файла - выведите на экран сумму этих чисел.
Нюансы
Сессия пользователя хранится на сервере. При этом она живет не вечно, а всего около получаса - если пользователь за это время не выполнил никаких обращений к сайту, то его сессия удалится и станет пустой.
Возможные проблемы
Основная проблема при работе с сессией следующая: нельзя делать никакого вывода в браузер до окончания работы с сессиями, в противном случае вы увидите следующую ошибку: Warning: Cannot send session cookie - headers already sent.
Что такое вывод в браузер? Это любой символ
до <?php
, например, текст или тег,
даже пробел, а также сообщение об ошибке
со стороны PHP. Кроме того нельзя делать
выводы через echo
, var_dump
и print_r
.
Кодировка вашего документа обязательно должна
быть utf-8
без BOM. Если она будет
просто utf-8
, то перед <?php
будет вставлен спец. символ, характерный
для данной кодировки и сессии работать не будут.