Один начинающий web программист задал мне вопрос. Можно ли через сессию передать в другой скрипт многомерный массив и как это сделать?
Вопрос в общем то простейший, но он вызвал непонимание у неопытного, но неглупого кодера. Я сначала, естественно, спросил: "а поисковики на что?" Он сказал, что не нашел там того что нужно. В общем решили мы его задачу. А потом я все таки решил понять, почему он не смог найти такой простой вещи в поиске.
Порывшись я понял, что бывалые программисты считают эту тему настолько простой и понятной, что и распространяться тут не о чем. А молодые задают вопросы настолько узкие, что тема в них и не ясна. Поэтому я все таки решил написать этот пост и поподробнее рассказать про переменные сессии.
Итак. Начнем с азов.
Что такое сессия PHP?
При входе пользователя на сайт, сервер начинает отслеживать все его действия и перемещения, идентифицируя при этом каждого пользователя. Средствами PHP можно создать сессию, то есть принудительно приказать серверу отслеживать данного пользователя при всех его перемещениях по сайту. С практической же стороны мы получаем массив $_SESSION, который будет содержать переменные сесии.
Подробно о массиве $_SESSION
Чем же хорош этот массив и чем он отличается от других?
Этот массив ассоциируется с конкретной сессией, то есть он хранит любую информацию, помещенную в него за время прибывания на сайте пользователя. В отличии от любого другого массива, данные в нем ни обновляются с каждым переходом от странице к странице, если, конечно, мы не обновляем их принудительно. А это значит, что мы можем, не таская за собой ничего лишнего, в любой момент обратиться к любой переменной записанной в него за время работы.
Другим методом хранения информации в течении всей работы пользователя является cookie. Но в отличае от сессии информация cookie хранится на машине клиента, а не на сервере и доступна для перехвата, что делает ее слабо приминимой при построении систем авторизации. А вторым минусом cookie является то, что пользователь просто может отключить использование этой функции в своем браузере.
Массив $_SESSION, как и любой другой массив PHP не имеет предопределенной размерности, поэтому каждый его элемент может содержать как одну переменную, так и скольугодно кратный массив.
Подытожим: массив $_SESSION нужен для передачи любой информации между страницами в рамках сессии пользователя.
Немного практики
Рассмотрим простенький пример, в котором передадим через сессию переменную, одномерный и двумерный массив.
Файл 1 (задаем переменные):
<?
session_start();
// присваиваем значения переменных
$perem = 'Значение переменной';
$mass1 = array(1 => 'a', 2 => 'b', 3 => 'c');
$mass2 = array(n1 => array(1 => 'm1', 2 => 'm2'),
n2 => array(1 => 'p1', 2 => 'p2'));
// кладем переменные в сессию
$_SESSION['perem'] = $perem;
$_SESSION['mass1'] = $mass1;
$_SESSION['mass2'] = $mass2;
?>
Файл 2 (получаем переменные):
<?
session_start();
echo $_SESSION['perem']; // выводит строку 'Значение переменной'
echo $_SESSION['mass1'][2]; // выводит 'b'
$array = $_SESSION['mass2']['n1']; // получаем массив, определенный в элементе n1 массива mass2
echo $_SESSION['mass2']['n2'][1]; // выводит 'p1'
?>
Стоит заметить, что каждый файл начинается с функции session_start(). С ее помощью мы открываем новую сессию для пользователя, если она еще не начата. При этом если сессия уже есть, то новая сессия не создается, а используется существующая.
Возможно, что и после этой статьи у Вас останутся вопросы. Задавайти их нам, попробуем ответить.