PHP: Работа с сессиями или «Как хранить значения»

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

Многие начинающие PHP программисты рано или поздно встречаются с проблемой иметь возможность хранить определенные значения на протяжении путешествия пользователя на сайте. Ярким примером такого случая является авторизация на сайте. Если сайт одностраничный, то многие находят выход в использовании скрытых форм и input полей, в которые заносятся нужные данные, а все переходы по ссылкам (если они вообще есть) реализуются путем отправки данных их такой формы POST или GET запросом. Конечно данный выход не верный. Да и к тому же посмотрев исходный код страницы можно во всей красе наблюдать все данные. Естественно такой вариант никуда не годится, тем более если речь идет о крупном сайте.

В связи с этим и был разработан механизм сессий. По сути это глобальная переменная, которая доступна на любой странице Вашего ресурса.
Рассмотрим работу сессий на простом примере. Допустим у нас есть три php страницы расположенные в одной папке: «a.php», «b.php», «c.php».

Содержимое файла a.php
Это страница с текстом «Привет, незнакомец», а так же формой для ввода Вашего имени.

<?php
echo "Привет, незнакомец!"
echo "<form action='b.php' method='post'>";
echo "Введите Ваше имя: <input type='text' name='n' />";
echo "<input type='submit' value='Представиться' />";
echo "</form>";
?>

Содержимое файла b.php
Исключительно обработка введенного на странице a.php имени.

<?php
if (!$_POST || !isset($_POST['n']) || empty($_POST['n']))
  die("Нужно ввести имя! <a href='a.php'>Назад</a>");
echo "Спасибо что представились, ".$_POST['n']."!";
echo "<a href='a.php'>Назад</a>";
?>

Содержимое файла c.php
Пока оставим его пустым.

<?php
?>

Теперь если открыть файл a.php, ввести имя и нажать на кнопку, нас перекинет на страницу b.php и мы увидим сообщение с текстом, что мы ввели. Если мы перейдем по ссылке «Назад», то мы опять увидим сообщение «Привет, незнакомец». Давайте сделаем так, чтобы имя, что мы ввели сохранялось и на странице a.php, при этом форма для ввода имени пропадала, а вместо нее появлялось предложение сменить имя. Для этого немного изменим код страниц «a.php», «b.php» и добавить код в файл «c.php».

Содержимое файла a.php

<?php session_start(); // обязательно в начале файла, первой строкой
//данной функцией мы по сути говорим что на данной странице 
//мы можем обращаться к глобальной переменной $_SESSION
echo "Привет, ".(isset($_SESSION['name']) ? $_SESSION['name'] : "Незнакомец")."!"
//<---если указано имя, то мы выводим его, иначе слово 'Незнакомец'
//--->
//если указано имя, мы предлагаем его сменить,
//если нет, то мы предлагаем его ввести-->
if (!isset($_SESSION['name']))
{
  echo "<form action='b.php' method='post'>";
  echo "Введите Ваше имя: <input type='text' name='n' />";
  echo "<input type='submit' value='Представиться' />";
  echo "</form>";
}
else 
  echo "<a href='c.php'>Сменить имя</a>";
?>

Содержимое файла b.php

<?php session_start();
if (!$_POST || !isset($_POST['n']) || empty($_POST['n']))
  die("Нужно ввести имя! <a href='a.php'>Назад</a>");
echo "Спасибо что представились, ".$_POST['n']."!";
echo "<a href='a.php'>Назад</a>";
$_SESSION['name'] = $_POST['n']; //сохраняем введенное имя в глобальную переменную
//как видно глобальная переменная сессии - это массив
?>

Содержимое файла c.php
Сбросим нашу глобальную переменную.

<?php session_start();
echo $_SESSION['name'].", теперь Вы можете сменить имя!";
echo "<a href='a.php'>Назад</a>";
session_destroy(); //стираем все данные в глобальном массиве $_SESSION
//после этой строчки $_SESSION['name'] не существует.
//Стоит заметить что если Вы храните несколько данных и Вам нужно стереть только
//определенные значения, то функцию session_destroy() использовать нельзя!
?>

Вот и все. Теперь Вы можете смело смело вводить Ваше имя и после возвращения на страницу ‘a.php’ картина немного измениться. Вас будут помнить, причем помнить до тех пор, пока Вы сами не захотите сделать так, чтобы Вас забыли (сессии сбрасываются автоматически после простоя, данный таймаут редактируется в настройках PHP).

Запись опубликована в рубрике PHP с метками , , , , . Добавьте в закладки постоянную ссылку.