Работа с сессиями (сеансами) в php 7

Содержание:

Как уничтожить сессию

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

Попробуем понять, как это работает в следующем примере.

Функция удаляет всё, что хранится в текущем сеансе. Таким образом, с последующими запросами вы увидите пустую переменную , поскольку данные сеанса, хранящиеся на диске, были удалены функцией .

Как правило, функцию нужно использовать, когда пользователь выходит из системы.

Что такое сессия в PHP?

Сессия — это механизм для сохранения информации на разных веб-страницах для идентификации пользователей пока они бродят по сайту или приложению. Вам интересно, почему сеансы нужны для веб-сайта? Чтобы понять, почему сеансы необходимы, нам нужно чуть вернуться назад и посмотреть, как работает HTTP-протокол.

Протокол HTTP — это протокол без учета состояния, что означает, что сервер не может сопоставить конкретного пользователя по несколькими запросами. Например, при доступе к веб-странице, сервер несёт ответственность за предоставление содержимого запрашиваемой страницы. Поэтому, когда вы обращаетесь к другим страницам одного и того же веб-сайта, веб-сервер интерпретирует каждый запрос отдельно, как если бы они не были связаны друг с другом. Серверу не известно, что каждый запрос исходит от одного и того же пользователя.

Следующая диаграмма вкратце изображает протокол HTTP.

В этой модели, если вы хотите отобразить пользовательскую информацию, вам нужно будет аутентифицировать пользователя в каждом запросе. Представьте, что вам нужно было вводить ваше имя пользователя и пароль на каждой странице с информацией ваших о данных! Да, это было бы громоздко и вообще не практично, и именно здесь на помощь приходят сеансы.

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

Обработка входа с сессиями и файлами «куки» (cookie)

Давайте быстро рассмотрим общий пример входа на веб-сайт, чтобы понять, что происходит за кулисами.

  1. Пользователь открывает страницу входа на веб-сайт.
  2. После отправки формы входа, сервер, на другом конце, аутентифицирует запрос, проверив введённые учётные данные.
  3. Если учётные данные, введённые пользователем, верны, сервер создаёт новый сеанс. Сервер генерирует уникальное случайное число, которое называется идентификатором сеанса. Также, на сервере, создаётся новый файл, который используется для хранения информации, относящейся к сеансу.
  4. Затем, идентификатор сеанса передаётся обратно пользователю, вместе с тем, что он запросил. За кулисами этот идентификатор сеанса отправляется в заголовке ответа «куки» (так называется по умолчанию).
  5. Когда браузер получает ответ от сервера, он получает заголовок куки-файла . Если в браузере разрешены «куки», то он сохранит этот , в котором хранится идентификатор сеанса, переданный сервером.
  6. Для последующих запросов, «кука» передаётся обратно на сервер. Когда сервер получает «куку» , он пытается инициализировать сеанс с этим идентификатором сеанса.  Он делает это, загружая файл сеанса, который был создан ранее во время инициализации сеанса. Затем он инициализирует суперглобальную переменную массива с данными, хранящимися в файле сеанса.

Таким образом, пользовательские данные сохраняются даже в нескольких запросах, и пользователь не теряется на протяжении всего сеанса.

На следующей диаграмме показано, как протокол HTTP работает с сеансами.

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

Как узнать время жизни сессии

Перед настройкой, стоит посмотреть текущее состояние. Есть несколько методов это сделать:

1. На сервере командой php

Вводим:

php -i | grep session

Получаем список параметров, имеющих отношение к сессиям. Нас интересуют:

  • session.cookie_lifetime => 0 => 0
  • session.gc_maxlifetime => 1440 => 1440

Данные значения — значение по умолчанию. cookie_lifetime => 0 говорит о действии файлов куки до закрытия браузера, если задать этому параметру определенное значение, сессия будет прерываться при активном сеансе, поэтому лучше ее оставлять в значении ноль.

2. C помощью php-функции ini_get

<?php
$maxlifetime = ini_get(«session.gc_maxlifetime»);
$cookielifetime = ini_get(«session.cookie_lifetime»);
echo $maxlifetime;
echo $cookielifetime;
?>

Настройка через файл .htaccess

Данный файл позволяет веб-мастеру управлять некоторыми настройками веб-сервера. Для его редактирования нужен доступ к файлам сайта. Способ не сработает, если в качестве обработчика PHP используется не Apache, а, например, NGINX + PHP-FPM. Хотя, тут тоже есть способ (о нем будет ниже).

В файл .htaccess вносим следующее:

php_value session.gc_maxlifetime 86400
php_value session.cookie_lifetime 0

* как можно заметить, параметры те же, что при настройки через php.ini.

Как говорилось выше, метод не сработает, если не используется Apache. Однако настройку можно выполнить на сервере (опять же, у нас должен быть соответствующий доступ).

Открываем файл настройки веб-сервера, например, в php-fpm:

vi /etc/php-fpm.d/www.conf

и редактируем/добавляем:

php_value = 86400
php_value = 0

После перезапускаем сервис:

systemctl restart php-fpm || service php-fpm restart

Создание переменных сеанса

В этом разделе мы изучим, как инициализировать переменные сессии в PHP.

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

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

Как видите, мы запустили сессию в начале скрипта, используя функцию . После этого мы инициализировали несколько переменных сессии. Наконец, мы использовали эти переменные через суперглобальную переменную .

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

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

Cookies

Cookies (в дальнейшем просто «куки») — небольшие фрагменты данных, которые веб-сервер отправляет браузеру.
Браузер сохраняет их у себя, а при следующем посещении веб-страницы отправляет обратно. Благодаря этому, веб-сервер сможет узнать своего «старого» посетитеиля, идентифицировать его.

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

Как установить куки: функция setcookie

Являясь серверным языком программирования, PHP может управлять заголовками, которые отправляет сервер, а значит может устанавливать и читать куки.
Чтобы добавить новую куку, необходимо вначале определиться со следующими критериями:

  • Название этой куки (может состоять только из символов латинского алфавита и цифр);
  • Значение, которое предполагается хранить;
  • Срок жизни куки — это обязательное условие.

За установку куки в PHP отвечает функция , ей нужно передать как минимум три параметра, описанных выше. Пример:

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

Как прочитать куки

В PHP максимально упрощён процесс чтения информации из кукисов. Все переданные сервером куки становятся автоматически доступны в специальном глобальном массиве
Так, чтобы получить содержимое куки с именем «visit_count», достаточно обратиться к одноимённому элементу массива , например вот так:

Обратите внимание: установив в сценарии куку через , прочитать её можно будет только при следующем посещении страницы

Собираем всё вместе

Теперь, научившись устанавливать и читать куки, напишем полноценный сценарий, который будет считать и выводить количество посещений страницы пользователем:

Get PHP Session Variable Values

Next, we create another page called «demo_session2.php». From this page, we
will access the session information we set on the first page («demo_session1.php»).

Notice that session variables are not passed individually to each new page,
instead they are retrieved from the session we open at the beginning of each
page ().

Also notice that all session variable values are stored in the global $_SESSION variable:

Example

<?phpsession_start();?><!DOCTYPE html><html>
<body><?php// Echo session variables that were set on previous pageecho «Favorite color is » . $_SESSION . «.<br>»;echo «Favorite animal is » . $_SESSION . «.»;?>
</body></html>

Another way to show all the session variable values for a user session is to run the
following code:

Example

<?phpsession_start();?><!DOCTYPE html><html><body><?php
print_r($_SESSION);?></body></html>

How does it work? How does it know it’s me?Most sessions set a user-key on
the user’s computer that
looks something like this: 765487cf34ert8dede5a562e4f3a7e12. Then, when a
session is opened on another page, it scans the computer for a user-key. If
there is a match, it accesses that session, if not, it starts a new session.

Как изменять и удалять переменные сеанса

Можно изменять или удалять переменные сеанса, созданные ранее в приложении так же, как обычные переменные PHP.

Давайте посмотрим, как изменять переменные сессии.

В приведённом выше коде, мы проверяем, установлена ли переменная. Если не установлена, мы устанавливаем её равной , в противном случае, увеличим её на . Таким образом, если вы обновите эту страницу несколько раз, вы должны увидеть, что счётчик, каждый раз, увеличивается на единицу!

С другой стороны, если вы хотите удалить переменную сеанса, вы можете использовать функцию , как показано в следующем фрагменте.

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

Открытие сессии

Сессия PHP открывается с помощью функции session_start(). Эта функция сначала проверяет открытые сессии, если ни одна сессия не открыта, запускает ее. Рекомендуется поместить вызов session_start() в начало страницы. Переменные сеанса хранятся в суперглобальном ассоциативном массиве $_SESSION[]. Доступ к этим переменным можно получить во время сессии.

Код для примера. Сначала откроем сессию, затем зарегистрируем переменную с именем visit, которая увеличивается каждый раз, когда страница посещается во время сеанса. Используйте функцию isset(), чтобы проверить, установлена ли уже переменная сессии или нет.

Результат. Можете перезагрузить страницу, чтобы увидеть работу счётчика.


Вы посещали эту страницу 1 в текущей сессии.

Вы можете открыть страницу в другой вкладке, но счётчик «узнает» вас и будет увеличиваться. Вы можете закрыть все вкладки и через некоторое время открыть страницу снова. Счётчик по-прежнему работает и не сбрасывается.

Узнать идентификатор сессии можно через функцию session_id().

Интересно, что через эту же функцию с одним аргументом, который принимает идентификатор сессии, можно заменить идентификатор, который генерирует система. Но в этом случае функцию следует использовать до session_start().

Также можно сохранять не одно значение, а целый массив.

Выводим массив на страницу.


Барсик, Мурзик, Рыжик

Сессии без файлов cookie

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

Этот код сформирует ссылку, на которую можно щёлкнуть.

Сессии

Мы уже умеем сохранять информацию для пользователя между посещениями страницы с помощью кук. Но зачем же нам ещё сессии, и для чего они нужны?
Сессии, они же сеансы, это, по сути, просто удобная обёртка над куками. Они также позволяют хранить данные, релевантные пользователю, но с некоторыми отличиями и ограничениями:

  • Данные хранятся не произвольное время, а только до закрытия вкладки с веб-страницей.
  • Чтобы сессии работали, в начале каждого сценария надо вызывать функцию .
  • Доступный объём для хранения информации намного больше.

Запись и чтение информации при использовании сессий выглядит просто как работа со специальным массивом .

Как устроены сессии

  1. PHP генерирует уникальный идентификатор браузера.
  2. Идентификатор сохраняется в специальную куку и передаётся с каждым запросом.
  3. Все данные, которые записываются в сессию, PHP автоматически сохраняет в специальном файле на сервере.

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

Перепишем сценарий для подсчета посещений, но теперь используем сессии:

Что такое сессия в PHP?

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

В файле :

session.save_path = "/path"

// Моя настройка в Windows 10 
session.save_path = "S:\Server\session"

В файле :

php_value session.save_path "/path"

// Моя настройка в Windows 10 
php_value session.save_path "S:\Server\session"

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

session_save_path("S:\Server\session");
session_start();

Второй вариант:

ini_set('session.save_path', "S:\Server\session");
session_start();

PHP Получить значения переменных сессий

Далее, создаем другую страницу под названием «demo_session2.php». На этой странице
будет доступ к информации о сессии, которую мы устанавили на первой странице «demo_session1.php».

Обратите внимание, что переменные сессии не передаются отдельно на каждую новую страницу,
вместо этого они извлекаются из сессии, который мы открываем в начале каждой странице. Также обратите внимание, что все значения переменных сессий, хранятся в глобальной переменной :

Также обратите внимание, что все значения переменных сессий, хранятся в глобальной переменной :

Пример

<?phpsession_start();?><!DOCTYPE html><html>
<body><?php// Выводим переменные сессии, которые были установлены на предыдущей страницеecho «Любимый цвет » . $_SESSION . «.<br>»;echo «Любимое животное » . $_SESSION . «.»;?>
</body></html>

Другой способ показать все значения переменных для сессий пользователя — следующий код:

Пример

<?phpsession_start();?><!DOCTYPE html><html><body><?php
print_r($_SESSION);?></body></html>

Как это работает? Откуда он знает, что это я?
Большинство сеансов пользователь-ключ компьютер пользователя, который
выглядит примерно так: 765487cf34ert8dede5a562e4f3a7e12. Когда
сеанс открывается на другой странице, он сканирует компьютер на наличие пользовательского ключа. Если
есть совпадение, он обращается к этому сеансу, если нет, он начинает новый сеанс.

Особенности работы протокола HTTP

Как вы узнали из прошлой главы, работа с веб-сайтами в интернете происходит по протоколу HTTP.
Это замечательный и простой протокол, который действует по схеме «запрос-ответ». То есть клиент (браузер) пользователя посылает на сервер запрос, состоящий, как правило, только из заголовков, а затем получает ответ в виде заголовков ответа и тела самого документа.
В отличие от многих других протоколов, HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ».
Иными словами, сервер не «запоминает» клиентов; каждый запрос он обрабатывает с «чистого листа».

Для сервера нет никакой разницы: запросил один пользователь страницу десять раз или десять разных пользователей по разу. Для него все запросы одинаковые.

К счастью, протокол HTTP, а также все браузеры предоставляют возможность сохранения информации о пользователе.

Аутентификация

Процедура проверки возможности доступа пользователя к определенной части сайта и называется аутентификацией.
Весь процесс аутентификации всегда состоит из нескольких шагов:

  1. При попытке доступа к закрытой части сайта, пользователь видит форму, где он должен ввести свой логин и пароль.
  2. Форма отправляется, а полученные данные сравниваются с действительным логином и паролем существующего пользователя.
  3. Если данные совпадают, то пользователь считается аутентифицированным и получает доступ к приватной части сайта.
  4. При повторном открытии этой страницы пользователь не должен повторно вводить пароль, если он уже делал это в рамках текущего сеанса.

Ещё немного терминологии

Следует различать два термина: аутентификация и авторизация.

Аутентификация — проверка подлинности предоставленного пользователем идентификатора (пара логин-пароль).Авторизация — процесс проверки и предоставления прав пользователю на выполнение определённого действия.

Логика авторизации намного сложнее, чем простая проверка совпадения почты и пароля при входе на сайт. В авторизацию могут также входить следующие понятия: группы пользователей, виды действий, ресурсы, иерархия ролей и действий. Этой теме можно посвятить отдельную главу. Мы не рассматриваем авторизацию в рамках этого учебника, потому что эта тема выходит за рамки «базовой».

Как запустить сессию

В этом разделе мы обсудим, как запустить сессию в PHP.

Всякий раз, когда вы хотите поработать с переменными сеанса, необходимо убедиться, что сеанс уже запущен. Сеанс в PHP можно запустить несколькими способами.

Использование функции

Метод, в котором сессия запускается функцией , вы будете видеть часто.

Важно, чтобы функция вызывалась в начале скрипта, перед отправкой чего-либо браузеру. В противном случае, вы столкнётесь с печально известной ошибкой

Автоматический запуск сеанса

При необходимости применения сессий в приложении, есть возможность запускать сеанс автоматически без использования функции .

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

С другой стороны, если у вас нет доступа к файлу php.ini, и вы используете веб-сервер Apache, эту переменную можно задать с помощью файла .htaccess.

Если вы добавите строку выше в ваш .htaccess файл, то это должно автоматически запускать сессии в вашем PHP-приложении.

Как получить идентификатор сеанса

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

Это должно выдать вам идентификатор текущего сеанса. Функция идентификатора интересна тем, что она ещё может принимать один аргумент — идентификатор сеанса.  Если вы хотите заменить сгенерированный системой идентификатор сеанса на ваш, это можно сделать, передав первый аргумент функции .

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

Регистрация на сайте

Перед тем, как мы начнем добавлять аутентификацию на своем сайте, придётся добавить форму для регистрации нового аккаунта.Аккаунт — это учётная запись пользователя.
Чтобы завести аккаунт, требуется пройти регистрацию — это заполнение специальной формы, где пользователь указывает свою почту, пароль, и, возможно, дополнительную информацию.
После регистрации все данные из формы сохраняются в базе данных как есть

Но хранению паролей нужно уделить особое внимание

Хранение паролей

Пароль пользователя — это секретный набор символов, который используется в дальнейшем в ходе аутентификации. Зная пароль пользователя, злоумышленник может войти на сайт под его именем. По этой причине пароль нельзя хранить в базе в открытом виде. Ведь если информацию из БД сайта украдут, то
данные всех пользователей станут скомпрометированными.
Вместо самого пароля, в базе будут храниться их отпечатки — хэши.

Что такое хеширование

Отпечаток (хэш) — это результат работы функции хэширования, которая вернёт для любого значения строку фиксированной длины.
Используя специальный математический алгоритм, такая функция умеет преобразовывать любую переданную информацию к строке фиксированной длины (например, 32 или 64 символа). Причём любому массиву информации, будь это все статьи из Википедии, или одно слово, всегда будет соответствовать уникальный отпечаток. Повторный вызов функции для одного и того же исходника всегда возвращает один и тот же хэш.
Обратная операция (получить из отпечатка оригинал) невозможна.

Возьмём простой пример. У нас есть информация, для которой мы хотим получить отпечаток. Пусть такой информацией будет следующая строка:

«Я знаю только то, что ничего не знаю, но другие не знают и этого»

Результат обработки этой строки хэширующей функцией SHA-1 будет таким:

Хэширующие функции часто используются для контроля целостности информации при передачи по сети. Например, чтобы убедиться в том, что загруженный файл не был повреждён, достаточно получить его хэш и сравнить данный хэш с опубликованным на сайте. Если в файле поменялся хоть один байт, то эти отпечатки будут совершенно разными.
Нам же функции хэширования помогут для сравнения паролей.

Реализация регистрации пользователя

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

Вызов этой функции вернёт следующую строку:
Именно это значение и следует хранить в БД, вместо пароля.

Пример использования сессии

В данном примере я покажу как можно использовать сессии (сеансы) в PHP на практике. Для начала на сервере создадим файл со следующим содержимым:

<?
// Создаётся пустой файл вида sess_819gk3tcdvilccra1t9kjdvsv9
// На машину пользователя прилетает сессионная кука с ID сессии. В данном случае 819gk3tcdvilccra1t9kjdvsv9
session_start();

// Инициализация строки с сообщениями об ошибках
$message = '';

// Если запрос отправлен методом POST
if ($_SERVER == "POST"):
  $name = strip_tags($_POST);
  $age = (int)$_POST;

  // Если поле `name` не заполнено
  if(empty($name)):
      $message = 'Поле `Ваше имя` обязательно к заполнению!';
  // Иначе, если поле `age` не заполнено
  elseif(empty($age)):
      $message = 'Поле `Ваш возраст` обязательно к заполнению!';
  // Если поля заполнены, записываем в сессию
  else:
      $_SESSION = $name;
      $_SESSION = $age;
  endif;

// Иначе берём данные из сессии
else:
    $name = $_SESSION ?? null;
    $age = $_SESSION ?? null;
endif;
?>
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>Сессии</title>
</head>
<body>
<h1>Создание сессии</h1>
<p><a href="destroy.php">Закрыть сессию</a></p><div class="ad_block">
                    <ins class="adsbygoogle"
                         style="display:block; text-align:center;"
                         data-ad-layout="in-article"
                         data-ad-format="fluid"
                         data-ad-client="ca-pub-4770392782346189"
                         data-ad-slot="4038172962"></ins>
                    <script>
                         (adsbygoogle = window.adsbygoogle || []).push({});
                    </script></div>
<p><?= $message ?></p>
<form action="<?= $_SERVER ?>" method="post">
    Ваше имя: <br>
    <input type="text" name="name" value="<?= $name ?>"><br><br>
    Ваш возраст: <br>
    <input type="text" name="age" value="<?= $age !== 0 ? $age : '' ?>"><br><br>
    <input type="submit" value="Отправить">
</form>
<?
if ($name and $age) {
    echo "<h3>Привет, $name!</h3>";
    echo "<h3>Тебе $age лет</h3>";
}
?>
</body>
</html>

Здесь я постарался максимально понятно описать всё происходящее. Под пользователя при заходе на эту страницу уже создаётся сессия, она пустая, это пока просто файл. Если пользователь заполнил все необходимые поля формы и нажал кнопку `Отправить`, то созданный файл (файл сессии) заполниться данными. Далее скрипт проверяет, если есть в сессии данные именно этого пользователя (здесь он уже сравнивает с кукой, которая пришла до этого на машину пользователя), то выводим эти данные. В противном случае, добавляем в сессию данные пользователя.

Создадим файл . При переходе на данную страницу будем удалять сессию полностью. Если необходимо удалять и сессионную куку, воспользуйтесь функцией:

setcookie(session_name(), session_id(), time()-3600);
// Файл destroy.php
<? session_start() ?>
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <title>Закрыть сессию</title>
</head>
<body>
  <h1>Сессия закрыта</h1>
  <a href="index.php">Создать сессию</a>
</body>
</html>
<? session_destroy() ?>

Настройка сессий на веб-сервере

Выполняется путем настройки файла php.ini. Данный способ удобен, если мы являемся администратором веб-сервера, а также если есть гарантия, что общая настройка сессий не повлияет на работоспособность всех веб-приложений, работающих на данном сервере.

Открываем на редактирование php.ini:

vi /etc/php.ini

И редактируем следующие параметры:

session.gc_maxlifetime = 86400
session.cookie_lifetime = 0

* где параметр gc_maxlifetime указывает на временя в секундах, после прошествии которого данные могут быть удалены; cookie_lifetime — время жизни файлов cookies; 86400 — 24 часа в секундах.
* если параметру gc_maxlifetime задать значение 0, действие сессий будет бесконечным. Это, как правило, не стоит делать — приведет к падению производительности и безопасности сервера.

Путь до php.ini может быть разный в зависимости от программной платформы и набора компонентов. Например, при использовании php-fpm, путь может быть следующий: /etc/php/7.1/fpm/php.ini. Узнать путь можно командой php -i | grep php.ini

После настройки параметров, необходимо перезагрузить сервер, являющийся интерпретатором PHP.

Если это apache:

systemctl restart apache2 || systemctl restart httpd

* в версиях Linux без systemd используем команду service apache2 restart или service httpd restart.

Если используем FastCGI (PHP-FPM):

systemctl restart php-fpm || service php-fpm restart

Итоги

	
// Создание и(или) доступ к сессии
session_start();

// Запись в сессионную переменную
$_SESSION = 'John';

// Чтение из сессионной переменной
echo $_SESSION;

// Удалить сессионную переменную
unset($_SESSION);

// Очистить массив $_SESSION полностью
session_unset();

// Удалить временное хранилище (файл сессии) на сервере
session_destroy();

// Принудительное удаление сессионной cookie
setcookie(session_name(), session_id(), time()-3600);


// Простой пример использования сессий
session_save_path('С:\temp');
session_start();
if (!isset($_SESSION)) $_SESSION = 0;
echo "Вы обновили эту страницу ".$_SESSION++." раз. ";
echo "<br><a href=".$_SERVER.">обновить";
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector