Что такое сессия в php
Сессии используются для хранения сведений временных данных (например, о том, что пользователь зашёл на сайт) при переходах между страницами одного сайта. При использовании сессий данные сохраняются во временных файлах на сервере.
Существует также технология с cookies, о которой Вы скорее всего слышали. Куки хранятся на компьютере пользователя, и по запросу отсылаются браузером серверу. Но об этом в другом уроке. |
Чаще всего сессиями (и куками впрочем тоже) пользуются при создании Интернет-магазинов, форумов, досок объявлений, социальных сетях, блогах и других ресурсах. Удобство системы сессий заключается хранении временной информации зашедшего пользователя/покупателя, данные о котором находятся в быстром доступе определённое время. У сессии существует естесственный срок годности - до закрытия браузера. Если закрыть только страницу, то при открытии сайта данные о пользхователе/покупателе всё равно будут доступны.
Логика работы сессии
Session (или сессия) это некое временное хранилище данных. Сразу предупреждаю, сохранять стоит небольшой объём данных. Например, логин и пароль заходящего пользователя или его порядковый номер в базе данных.
Пример работы
1. Пользователь вводит логин и пароль и заходит на сайт
2. Данные с логином и паролем сохраняются в сессии одной из страниц сайта:
Файл index.php
session_start(); // каждый файл, в котором Вы хотите использовать данные сессий должен в начале кода содержать команду "запуска сессии"
$login = 'admin';
$password = 'pass';
$_SESSION['login'] = $login; // сохраняем переменную содержащую логин
$_SESSION['password'] = $password; // сохраняем переменную содержащую пароль
3. При переходе на другую страницу сайта эти данные также будут доступны:
Файл example.php (или любая другая страница)
session_start(); // снова "запускаем сессиию"
echo "Ваш логин ".$_SESSION['login']; // выведет "Ваш логин admin", хотя на этой странице мы не записывали данных!
Видите, все просто!
4. Если хотите очистить данные сессии, то достаточно:
Файл example.php
session_start(); // снова "запускаем сессиию"
unset($_SESSION['login']); // так разрегистрировали переменную или "уничтожили"
echo "Ваш логин ".$_SESSION['login']; // выведет "Ваш логин " . Так как мы её уничтожили в прошлой строке, то и данных нет
session_destroy(); // разрушаем сессию. Всех данных, включая $_SESSION['password'] уже нет. При их запросе будет выводить ошибка
В целом подобная передача похожа на метод POST, но только Вы уже не должны писать много лишнего кода, а все данные, передаваемые от страницы к странице, хранятся во временных файлах на сервере. Повторюсь, сессии должны содержать небольшие объёмы данных, поэтому они подходят под хранение логина/пароля, корзины покупателя и других небольших объёмов.
Передача значения или массива с помощью сессии PHP
В сессию можно записывать не только строку, но и массив данных. Только не переусердствуйте с объёмом массива, так как всё это повлияет на быстройдействие и занятое пространство на сервере.
Вновь используем некую стартовую страницу index.php
<?php
session_start();
$r = array('one', 'two', 'three');
$_SESSION['arr'] = $r;
?>
<a href="/test.php">На страницу, где все отобразится</a>
Сохранили данные в сессии и переходим по ссылке на другую страницу, где всё данные и будем выводить.
Файл получатель, страница test.php где открываем массив
<?php
session_start();
print_r($_SESSION['arr']);
// выведет
/*
Array
(
[0] => one
[1] => two
[2] => three
)
*/
?>
Возможно, Вы захотите освежить в памяти урок по массивам в PHP. В целом же всё должно быть понятно.
Другие функции для работы с сессиями
session_unregister(string) - сессия забывает значение заданной глобальной переменной;
session_destroy() - сессия уничтожается (например, если пользователь покинул систему, нажав кнопку выход);
session_set_cookie_params(int lifetime [, string path [, string domain]]) - с помощью этой функции можно установить, как долго будет жить сессия, задав unix_timestamp определяющий время смерти сессии.
Список функций для работы с сессиями (session) в php
session_cache_expire - возвращает окончание действия текущего кэша
session_cache_limiter - получает и/или устанавливает текущий ограничитель кэша
session_commit - псевдоним session_write_close()
session_decode - декодирует данные сессии из строки
session_destroy - уничтожает все данные, зарегистрированные для сессии
session_encode - шифрует данные текущей сессии как строку
session_get_cookie_params - получает параметры куки сессии
session_id - получает и/или устанавливает текущий session id
session_is_registered - определяет, зарегистрирована ли переменная в сессии
session_module_name - получает и/или устанавливает модуль текущей сессии
session_name - получает и/или устанавливает имя текущей сессии
session_regenerate_id - модифицирует текущий идентификатор сеанса недавно сгенерированным
session_register - регистрирует одну или более переменных для текущей сессии
session_save_path - получает и/или устанавливает путь сохранения текущей сессии
session_set_cookie_params - устанавливает параметры куки сессии
session_set_save_handler - устанавливает функции хранения сессии уровня пользователя
session_start - инициализирует данные сессии
session_unregister - дерегистрирует переменную из текущей сессии
session_unset - освобождает все переменные сессии
session_write_close - записывает данные сессии и конец сессии
По умолчанию, сессия живёт до тех пор, пока клиент не закроет окно браузера. |
Примеры работы сессий
Счётчик просмотров страницы во время сессии. Наглядно пример работы. Однако после закрытия браузера отсчёт начнётся заново.
Счётчик посещений одной страницы в рамках одной сессии
<?
// Простой пример использования сессий без Cookies.
session_name("test");
session_start();
$_SESSION['count'] = @$_SESSION['count'] + 1;
?>
<h2>Счетчик</h2>
В текущей сессии работы с браузером Вы открыли эту страницу
<?=$_SESSION['count']?> раз(а).
Закройте браузер, чтобы обнулить этот счетчик.
<a href="#">Нажмите сюда для обновления страницы!</a>
При каждом переходе счётчик будет увеличиваться на 1)
Спасибо за внимание! Удачи в начинаниях!