аватар Автор: Сергей Касаткин | 14 августа 2014 19:15

Уроки / PHP /

Урок 10. Что такое сессии (SESSION) в PHP

Сессии в PHP или как данные о зашедшем на сайт пользователе или покупателе сохраняются при переходе между страницами сайта без особого труда. Урок очень важный. Актуален для создания 95% сайтов.


Что такое сессия в 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)

Спасибо за внимание! Удачи в начинаниях!
 



Похожие статьи


Комментарии к статье (vk.com)