Учебники

PHP — Сессии

Альтернативный способ сделать данные доступными на разных страницах всего сайта — это использовать PHP-сессию.

Сеанс создает файл во временном каталоге на сервере, где хранятся зарегистрированные переменные сеанса и их значения. Эти данные будут доступны всем страницам сайта во время этого посещения.

Расположение временного файла определяется настройкой в ​​файле php.ini с именем session.save_path . Перед использованием любой переменной сеанса убедитесь, что вы настроили этот путь.

Когда начинается сеанс, происходит следующее:

  • Сначала PHP создает уникальный идентификатор для этого конкретного сеанса, который представляет собой случайную строку из 32 шестнадцатеричных чисел, например 3c7foj34c3jj973hjkop2fc937e3443.

  • Файл cookie с именем PHPSESSID автоматически отправляется на компьютер пользователя для хранения уникальной строки идентификации сеанса.

  • Файл автоматически создается на сервере в назначенном временном каталоге и носит имя уникального идентификатора с префиксом sess_, т.е. sess_3c7foj34c3jj973hjkop2fc937e3443.

Сначала PHP создает уникальный идентификатор для этого конкретного сеанса, который представляет собой случайную строку из 32 шестнадцатеричных чисел, например 3c7foj34c3jj973hjkop2fc937e3443.

Файл cookie с именем PHPSESSID автоматически отправляется на компьютер пользователя для хранения уникальной строки идентификации сеанса.

Файл автоматически создается на сервере в назначенном временном каталоге и носит имя уникального идентификатора с префиксом sess_, т.е. sess_3c7foj34c3jj973hjkop2fc937e3443.

Когда PHP-сценарий хочет получить значение из переменной сеанса, PHP автоматически получает уникальную строку идентификатора сеанса из файла cookie PHPSESSID, а затем ищет в своем временном каталоге файл с этим именем, и проверка может быть выполнена путем сравнения обоих значений.

Сеанс заканчивается, когда пользователь теряет браузер или после того, как он покидает сайт, сервер завершает сеанс через предварительно определенный период времени, обычно 30 минут.

Запуск PHP-сессии

Сеанс PHP легко запускается путем вызова функции session_start (). Эта функция сначала проверяет, запущен ли уже сеанс, и, если он не запущен, запускает один. Рекомендуется помещать вызов session_start () в начале страницы.

Переменные сеанса хранятся в ассоциативном массиве с именем $ _SESSION [] . Эти переменные могут быть доступны во время сеанса.

В следующем примере начинается сеанс, затем регистрируется переменная с именем counter, которая увеличивается при каждом посещении страницы во время сеанса.

Используйте функцию isset (), чтобы проверить, установлена ​​ли переменная сеанса или нет.

Поместите этот код в файл test.php и загрузите этот файл много раз, чтобы увидеть результат —

Live Demo

<?php
   session_start();
   
   if( isset( $_SESSION['counter'] ) ) {
      $_SESSION['counter'] += 1;
   }else {
      $_SESSION['counter'] = 1;
   }
	
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
?>

<html>
   
   <head>
      <title>Setting up a PHP session</title>
   </head>
   
   <body>
      <?php  echo ( $msg ); ?>
   </body>
   
</html>

Это даст следующий результат —

You have visited this page 1in this session.

Уничтожение сессии PHP

Сеанс PHP может быть уничтожен функцией session_destroy () . Эта функция не нуждается в аргументе, и один вызов может уничтожить все переменные сеанса. Если вы хотите уничтожить одну переменную сеанса, вы можете использовать функцию unset (), чтобы сбросить переменную сеанса.

Вот пример для сброса одной переменной —

<?php
   unset($_SESSION['counter']);
?>

Вот вызов, который уничтожит все переменные сеанса —

<?php
   session_destroy();
?>

Включение авто сессии

Вам не нужно вызывать функцию start_session (), чтобы начать сеанс, когда пользователь посещает ваш сайт, если вы можете установить для переменной session.auto_start значение 1 в файле php.ini .

Сессии без куки

Может быть случай, когда пользователь не разрешает хранить куки на своем компьютере. Таким образом, существует другой способ отправки идентификатора сеанса в браузер.

Кроме того, вы можете использовать постоянный SID, который определяется, если сеанс начался. Если клиент не отправил соответствующий файл cookie сеанса, он имеет вид session_name = session_id. В противном случае он расширяется до пустой строки. Таким образом, вы можете безоговорочно встраивать его в URL.

В следующем примере показано, как зарегистрировать переменную и как правильно связать другую страницу с помощью SID.

Live Demo

<?php
   session_start();
   
   if (isset($_SESSION['counter'])) {
      $_SESSION['counter'] = 1;
   }else {
      $_SESSION['counter']++;
   }
   
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
   
   echo ( $msg );
?>

<p>
   To continue  click following link <br />
   
   <a  href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>">
</p>

Это даст следующий результат —

You have visited this page 1in this session.
To continue click following link 

Htmlspecialchars () может использоваться при печати SID для предотвращения атак, связанных с XSS.