PHP - Сессии

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

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

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

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

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

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

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

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

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

Запуск сеанса PHP

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

Переменные сеанса хранятся в ассоциативном массиве, называемом $_SESSION[]. Доступ к этим переменным можно получить в течение всего сеанса.

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

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

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

<?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 файл.

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

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

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

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

<?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.