Мастерская iPloGic
+7 (926) 961-66-26

 — База знаний — Передача переменных, одномерных и многомерных массивов через сессию PHP

Передача переменных, одномерных и многомерных массивов через сессию PHP

Один начинающий 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(). С ее помощью мы открываем новую сессию для пользователя, если она еще не начата. При этом если сессия уже есть, то новая сессия не создается, а используется существующая.

Возможно, что и после этой статьи у Вас останутся вопросы. Задавайти их нам, попробуем ответить.

02.07.2011