Сессии в php
Содержание:
- Что же в Java Enterprise?
- Session Store Implementation
- session_start
- Аутентификация
- Что такое сессия в PHP?
- Get PHP Session Variable Values
- Что такое сессия в PHP?
- Логика работы сессии
- Structure of a server response
- Небольшой вопросник (FAQ)
- Создание сессии
- Http Session Interface
- Применение сессий
- Session Configurations Options
Что же в Java Enterprise?
К великому счастью, разработчики JavaEE освобождены от такой рутины и выполнение данной задачи взвалено на плечи контейнера, в пределах которого развёрнуто приложение. Осталось понять, каким же образом он это делает?
Работа с пользовательскими сессиями веб-приложений в JavaEE вынесена в раздел Servlet API и осуществляется средствами интерфейса javax.servlet.http.HttpSession, который предоставляет высокоуровневые методы работы с ними. Непосредственная реализация уже располагается в библиотеке servlet-api.jar используемого контейнера сервлетов и напрямую зависит от него. Существует два способа получения ссылки на объект пользовательского сеанса из объекта клиентского запроса javax.servlet.http.HttpServletRequest, используя методы Servlet API:
- HttpSession request.getSession(boolean create) — для ложного значения параметра create данный метод возвращает объект сессии, если он был создан у данного запроса, и null в противном случае; в случае истинного значения create данный метод равносилен методу п.2.
- HttpSession request.getSession() — если сеанс не установлен, то контейнер его создаёт, иначе возвращает уже созданный объект сессии.
В момент, когда сеанс установлен, сервлет-контейнер создаёт пользовательский cookie с именем JSESSIONID, значение которого содержит уникальный идентификатор сессии (это же значение можно получить методом String getId() объекта HttpSession). Наряду с этим, в рамках контейнера определяется дефолтное значение таймаута сессии — время неактивного состояния пользователя, приводящее к устареванию его сеанса связи с сервером.
Данное значение конфигурируется на уровне контейнера сервлетов либо непосредственно в веб-приложении на уровне дескриптора развёртывания web.xml или непосредственным вызовом метода void setMaxInactiveInterval(int interval) у объекта сессии. Начиная с версии Servlet API 3.0, также можно задать и время жизни куки JSESSIONID в конфиге web.xml, уничтожение которой также приведёт к запросу на повторное установление сеанса между клиентом и сервером. Кусок дескриптора развертывания web.xml:
<session-config> <!-- Timeout of inactivity in minutes --> <session-timeout>15</session-timeout> <cookie-config> <http-only>true</http-only> <path>/</path> <!-- Cookie lifetime in seconds --> <max-age>900</max-age> </cookie-config> </session-config>
А что же будет, если пользовательские «печеньки» запрещены на клиентской машине? Данный факт будет выявлен сервером автоматически и для поддержания сеанса будет использован механизм URL Rewriting, который позволяет передавать UID-сессии непосредственно в адресной строке, например так:
http://www.mysite.com/MyApp/myservlet;jsessionid=1E6FEC0D14D044541DD84D2D013D29ED
А зачем они вообще нужны эти http-сессии и какие в принципе возможности они предоставляют — это уже отдельная тема.
Session Store Implementation
Every session store must be an and implement specific
methods. The following methods are the list of required, recommended,
and optional.
- Required methods are ones that this module will always call on the store.
- Recommended methods are ones that this module will call on the store if
available. - Optional methods are ones this module does not call at all, but helps
present uniform stores to users.
For an example implementation view the connect-redis repo.
Optional
This optional method is used to get all sessions in the store as an array. The
should be called as .
store.destroy(sid, callback)
Required
This required method is used to destroy/delete a session from the store given
a session ID (). The should be called as once
the session is destroyed.
store.clear(callback)
Optional
This optional method is used to delete all sessions from the store. The
should be called as once the store is cleared.
Optional
This optional method is used to get the count of all sessions in the store.
The should be called as .
store.get(sid, callback)
Required
This required method is used to get a session from the store given a session
ID (). The should be called as .
The argument should be a session if found, otherwise or
if the session was not found (and there was no error). A special
case is made when to act like .
store.set(sid, session, callback)
Required
This required method is used to upsert a session into the store given a
session ID () and session () object. The callback should be
called as once the session has been set in the store.
store.touch(sid, session, callback)
Recommended
This recommended method is used to «touch» a given session given a
session ID () and session () object. The should be
called as once the session has been touched.
This is primarily used when the store will automatically delete idle sessions
and this method is used to signal to the store the given session is active,
potentially resetting the idle timer.
session_start
Объясняют это все тем, что левой руке сердце подсказывает, что выбирать.
Психологи появление всех этих суеверий объясняют тем, что перед экзаменом студентам необходимо чувство уверенности. Соблюдение старых традиций кроме этого еще усиливает чувство коллективизма. У студента возникает ощущение, что он являешься частью какого-то содружества. Все это предает сил и уверенности перед экзаменом.
Но как бы искренне вы не верили в магическое действие всех этих суеверий, успешное завершение сессии, гарантирует лишь одна вещь – хорошая подготовка к экзаменам. Поэтому, если вы тщательно подготовились, вам нечего бояться: ни трех черных котов, которые перед вами пробежали дорогой в ВУЗ, ни того, что вы одели что-то новое. Главное в исполнении всех ритуалов – не забыть о том, что является вашей целью, то есть успешная сдача экзаменов и зачетов на основе полученных знаний.
Советую также прочитать: Как не волноваться перед экзаменом >>>
Аутентификация
Процедура проверки возможности доступа пользователя к определенной части сайта и называется аутентификацией.
Весь процесс аутентификации всегда состоит из нескольких шагов:
- При попытке доступа к закрытой части сайта, пользователь видит форму, где он должен ввести свой логин и пароль.
- Форма отправляется, а полученные данные сравниваются с действительным логином и паролем существующего пользователя.
- Если данные совпадают, то пользователь считается аутентифицированным и получает доступ к приватной части сайта.
- При повторном открытии этой страницы пользователь не должен повторно вводить пароль, если он уже делал это в рамках текущего сеанса.
Ещё немного терминологии
Следует различать два термина: аутентификация и авторизация.
Аутентификация — проверка подлинности предоставленного пользователем идентификатора (пара логин-пароль).Авторизация — процесс проверки и предоставления прав пользователю на выполнение определённого действия.
Логика авторизации намного сложнее, чем простая проверка совпадения почты и пароля при входе на сайт. В авторизацию могут также входить следующие понятия: группы пользователей, виды действий, ресурсы, иерархия ролей и действий. Этой теме можно посвятить отдельную главу. Мы не рассматриваем авторизацию в рамках этого учебника, потому что эта тема выходит за рамки «базовой».
Что такое сессия в PHP?
Сессия — это механизм для сохранения информации на разных веб-страницах для идентификации пользователей пока они бродят по сайту или приложению. Вам интересно, почему сеансы нужны для веб-сайта? Чтобы понять, почему сеансы необходимы, нам нужно чуть вернуться назад и посмотреть, как работает HTTP-протокол.
Протокол HTTP — это протокол без учета состояния, что означает, что сервер не может сопоставить конкретного пользователя по несколькими запросами. Например, при доступе к веб-странице, сервер несёт ответственность за предоставление содержимого запрашиваемой страницы. Поэтому, когда вы обращаетесь к другим страницам одного и того же веб-сайта, веб-сервер интерпретирует каждый запрос отдельно, как если бы они не были связаны друг с другом. Серверу не известно, что каждый запрос исходит от одного и того же пользователя.
Следующая диаграмма вкратце изображает протокол HTTP.
В этой модели, если вы хотите отобразить пользовательскую информацию, вам нужно будет аутентифицировать пользователя в каждом запросе. Представьте, что вам нужно было вводить ваше имя пользователя и пароль на каждой странице с информацией ваших о данных! Да, это было бы громоздко и вообще не практично, и именно здесь на помощь приходят сеансы.
Сессия позволяет вам обмениваться информацией с разными страницами одного сайта или приложения, и помогает поддерживать состояние. Это позволяет серверу знать, что все запросы исходят от одного и того же пользователя, что позволяет сайту отображать информацию и настройки пользователя.
Давайте быстро рассмотрим общий пример входа на веб-сайт, чтобы понять, что происходит за кулисами.
- Пользователь открывает страницу входа на веб-сайт.
- После отправки формы входа, сервер, на другом конце, аутентифицирует запрос, проверив введённые учётные данные.
- Если учётные данные, введённые пользователем, верны, сервер создаёт новый сеанс. Сервер генерирует уникальное случайное число, которое называется идентификатором сеанса. Также, на сервере, создаётся новый файл, который используется для хранения информации, относящейся к сеансу.
- Затем, идентификатор сеанса передаётся обратно пользователю, вместе с тем, что он запросил. За кулисами этот идентификатор сеанса отправляется в заголовке ответа «куки» (так называется по умолчанию).
- Когда браузер получает ответ от сервера, он получает заголовок куки-файла . Если в браузере разрешены «куки», то он сохранит этот , в котором хранится идентификатор сеанса, переданный сервером.
- Для последующих запросов, «кука» передаётся обратно на сервер. Когда сервер получает «куку» , он пытается инициализировать сеанс с этим идентификатором сеанса. Он делает это, загружая файл сеанса, который был создан ранее во время инициализации сеанса. Затем он инициализирует суперглобальную переменную массива с данными, хранящимися в файле сеанса.
Таким образом, пользовательские данные сохраняются даже в нескольких запросах, и пользователь не теряется на протяжении всего сеанса.
На следующей диаграмме показано, как протокол HTTP работает с сеансами.
Теперь, когда вы увидели краткое введение в работу сессий, мы создадим несколько практических примеров, чтобы продемонстрировать, как создавать и манипулировать переменными сессии.
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?
Известно, что веб-сервер не поддерживает постоянного соединения с посетителем, и каждый запрос обрабатывается, как новый, без связи с предыдущими. А это означает, что сервер не может запоминать конкретного посетителя между несколькими запросами, т.е. при доступе к веб-странице сервер отвечает за предоставление содержимого только конкретной запрашиваемой страницы.
Часто возникает необходимость отображать информацию определенного пользователя на всех страницах и, при этом, вам нужно аутентифицировать пользователя в каждом запросе. Представьте, что вам нужно было бы вводить логин и пароль пользователя на каждой странице, где была представлена ваша информация о профиле. Это было бы вообще не практично, и именно в таких случаях необходимы сессии.
Переменные сессии решают эту проблему, сохраняя информацию о пользователе, которая будет использоваться на нескольких веб-страницах (например, логин посетителя, любимая музыка и др.). По умолчанию переменные сессии действуют до тех пор, пока пользователь не закроет браузер.
Одним из недостатков файлов является то, что они хранятся на компьютере пользователя. Это дает пользователю возможность получать доступ, просматривать и изменять этот файл cookie, что может привести к сбою приложения. PHP, наоборот, хранят в системе пользователя только идентификационный файл cookie, который используется для ссылки на файл сессии на сервере. Таким образом, пользователь не имеет доступа к содержимому файла сессии, тем самым обеспечивая безопасную альтернативу файлам cookie. Сессии PHP также работают, когда пользователь отключает поддержку файлов cookie браузером.
Сеанс создает файл во временном каталоге на сервере, где хранятся зарегистрированные переменные сеанса и их значения. Эти данные будут доступны для всех страниц сайта во время этого посещения.
Сессия создает файл во временном каталоге на сервере, где хранятся зарегистрированные переменные сессии и их значения. Эти данные будут доступны для всех страниц сайта во время этого посещения пользователем.
Расположение временного файла определяется настройкой в файле php.ini в директиве .
Пример использования в файле php.ini:
session.save_path = «/var/www/my_site/data/tmp»
Изменить директорию для хранения файлов сессий можно добавив в файл .htaccess:
php_value session.save_path «/var/www/my_site/data/tmp»
Перед использованием любой переменной сеанса убедитесь, что вы установили этот путь.
Когда сессия стартует, происходит следующее:
-
Сначала PHP создает уникальный идентификатор для этой конкретной сессии, который представляет собой случайную строку из 32 шестнадцатеричных чисел, например 5c9foj24c3jj973hjkop2fc937e3463.
-
Файл cookie под названием автоматически отправляется на компьютер пользователя для хранения уникальной строки идентификации сессии.
-
Файл автоматически создается на сервере в назначенном временном каталоге и имеет имя уникального идентификатора с префиксом sess_, т.е. sess_5c9foj24c3jj973hjkop2fc937e3463.
Когда сценарию PHP нужно получить значение из переменной сессии, PHP автоматически получает строку уникального идентификатора сессии из файла cookie , а затем ищет в своем временном каталоге файл c этим именем и проверка может быть выполнена путем сравнения обоих значений.
С помощью специальных функций мы можем получить данный идентификатор:
echo session_id(); // идентификатор сессии
echo session_name(); // имя — PHPSESSID
То же значение мы могли бы получить, обратившись к cookie напрямую:
echo $_COOKIE;
Сессия заканчивается, когда пользователь закрывает браузер или покидает сайт, сервер завершает сеанс через заранее определенный период времени, обычно продолжительностью 30 минут.
Логика работы сессии
Session (или сессия) это некое временное хранилище данных. Сразу предупреждаю, сохранять стоит небольшой объём данных. Например, логин и пароль заходящего пользователя или его порядковый номер в базе данных.
Пример работы1. Пользователь вводит логин и пароль и заходит на сайт2. Данные с логином и паролем сохраняются в сессии одной из страниц сайта:
Файл index.php
session_start(); // каждый файл, в котором Вы хотите использовать данные сессий должен в начале кода содержать команду «запуска сессии»
$login = ‘admin’; $password = ‘pass’; $_SESSION = $login; // сохраняем переменную содержащую логин $_SESSION = $password; // сохраняем переменную содержащую пароль
3. При переходе на другую страницу сайта эти данные также будут доступны:
Файл example.php (или любая другая страница)
session_start(); // снова «запускаем сессиию»
echo «Ваш логин «.$_SESSION; // выведет «Ваш логин admin», хотя на этой странице мы не записывали данных! Видите, все просто!
4. Если хотите очистить данные сессии, то достаточно:
Файл example.php
session_start(); // снова «запускаем сессиию»
unset($_SESSION); // так разрегистрировали переменную или «уничтожили» echo «Ваш логин «.$_SESSION; // выведет «Ваш логин » . Так как мы её уничтожили в прошлой строке, то и данных нет
session_destroy(); // разрушаем сессию. Всех данных, включая $_SESSION уже нет. При их запросе будет выводить ошибка В целом подобная передача похожа на метод POST, но только Вы уже не должны писать много лишнего кода, а все данные, передаваемые от страницы к странице, хранятся во временных файлах на сервере. Повторюсь, сессии должны содержать небольшие объёмы данных, поэтому они подходят под хранение логина/пароля, корзины покупателя и других небольших объёмов.
Structure of a server response
After the connected agent has sent its request, the web server processes it, and ultimately returns a response. Similar to a client request, a server response is formed of text directives, separated by CRLF, though divided into three blocks:
- The first line, the status line, consists of an acknowledgment of the HTTP version used, followed by a response status code (and its brief meaning in human-readable text).
- Subsequent lines represent specific HTTP headers, giving the client information about the data sent (e.g. type, data size, compression algorithm used, hints about caching). Similarly to the block of HTTP headers for a client request, these HTTP headers form a block ending with an empty line.
- The final block is a data block, which contains the optional data.
Successful web page response:
HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 55743 Connection: keep-alive Cache-Control: s-maxage=300, public, max-age=0 Content-Language: en-US Date: Thu, 06 Dec 2018 17:37:18 GMT ETag: "2e77ad1dc6ab0b53a2996dfd4653c1c3" Server: meinheld/0.6.1 Strict-Transport-Security: max-age=63072000 X-Content-Type-Options: nosniff X-Frame-Options: DENY X-XSS-Protection: 1; mode=block Vary: Accept-Encoding,Cookie Age: 7 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>A simple webpage</title> </head> <body> <h1>Simple HTML5 webpage</h1> <p>Hello, world!</p> </body> </html>
Notification that the requested resource has permanently moved:
HTTP/1.1 301 Moved Permanently Server: Apache/2.4.37 (Red Hat) Content-Type: text/html; charset=utf-8 Date: Thu, 06 Dec 2018 17:33:08 GMT Location: https://developer.mozilla.org/ (this is the new link to the resource; it is expected that the user-agent will fetch it) Keep-Alive: timeout=15, max=98 Accept-Ranges: bytes Via: Moz-Cache-zlb05 Connection: Keep-Alive Content-Length: 325 (the content contains a default page to display if the user-agent is not able to follow the link) <!DOCTYPE html... (contains a site-customized page helping the user to find the missing resource)
Notification that the requested resource doesn’t exist:
HTTP/1.1 404 Not Found Content-Type: text/html; charset=utf-8 Content-Length: 38217 Connection: keep-alive Cache-Control: no-cache, no-store, must-revalidate, max-age=0 Content-Language: en-US Date: Thu, 06 Dec 2018 17:35:13 GMT Expires: Thu, 06 Dec 2018 17:35:13 GMT Server: meinheld/0.6.1 Strict-Transport-Security: max-age=63072000 X-Content-Type-Options: nosniff X-Frame-Options: DENY X-XSS-Protection: 1; mode=block Vary: Accept-Encoding,Cookie X-Cache: Error from cloudfront <!DOCTYPE html... (contains a site-customized page helping the user to find the missing resource)
HTTP response status codes indicate if a specific HTTP request has been successfully completed. Responses are grouped into five classes: informational responses, successful responses, redirects, client errors, and servers errors.
- : OK. The request has succeeded.
- : Moved Permanently. This response code means that the URI of requested resource has been changed.
- : Not Found. The server cannot find the requested resource.
Небольшой вопросник (FAQ)
Где физически хранятся данные сессий?
Данные сессий хранятся на сервере. По умолчанию они записываются в файлы, но можно задать свой собственный механизм хранения данных сессий (например с использованием базы данных). Если хотите подробностей, смотрите функцию session_set_save_handler.
Можно ли написать собственный механизм сессий?
Да, это вполне возможно. Как видите, PHP не использует ничего сверхъестественного — идентификатор сохраняется между запросами с помощью кук, данные сессий хранятся в файлах на сервере.
Например, собственный механизм работы с сессиями есть в популярном фреймворке CodeIgniter.
Насколько безопасен механизм сессий?
Сессия идентифицируется только с помощью уникального идентификатора сессии, поэтому в общем случае злоумышленнику достаточно украсть его, чтобы запутать сервер. Возьмём тестовый скрипт, который мы использовали выше. Если обращение к нему будет с другого IP (по отношению к создавшему сессию), но PHPSESSID будет передаваться тот же самый, то сессия будет успешно восстановлена и счётчик будет увеличиваться с предыдущего сохранённого значения.
Обеспечивать дополнительную защиту придётся вам самим. Например:
- Можно сохранять в данных сессии IP и User-Agent клиента (будет храниться на стороне сервера), а затем при каждом обращении проверять, что актуальные значения совпадают с сохранёнными. В данном случае приходится искать компромисс между безопасностью и удобством работы пользователя.К примеру, если у пользователя динамический IP и вы используете сессии для поддержания авторизации, но при этом проверяете совпадение IP, то при каждой смене адреса пользователю придётся заново вводить логин и пароль.Точно также строка User-Agent может меняться при обновлении версии браузера или при установке некоторых плагинов.
- Одним из рекомендуемых механизмов защиты сессий является повторная генерация идентификатора при каждом обращении к скрипту (см. функцию session_regenerate_id). Посмотреть скрипт и алгоритм работы в разрезе можно ниже.Примечание. Если верить , то при повторной генерации идентификатора могут возникнуть проблемы с параллельным доступом к данным.
Создание сессии
Общий принцип работы сессий рассматривался в прошлом уроке. Из него стало ясно, что PHP связывает данные, хранимые на сервере, и конкретного пользователя с помощью записи уникального идентификатора в cookie. Все сессионные данные доступны через суперглобальный массив $_SESSION. Однако прежде чем осуществлять запись или чтение данных из него, нужно явным образом создать сессию.
В PHP есть специальная функция session_start(). Она осуществит проверку присланных заголовков HTTP-запроса на наличие cookie с идентификатором сессии. Если идентификатор отсутствует, будет создана новая сессия, иначе функция откроет обработчики чтения-записи и синхронизирует текущие сеансовые данные с массивом $_SESSION. Функция возвращает булево значение true в случае успешного завершения, а false, если произошли ошибки.
Как вы уже знаете, настройка сессий происходит с помощью конфигурационного файла php.ini. Для этого используется ряд директив, с полным списком которых вы ознакомитесь на странице официальной документации.
Начиная с версии PHP 7.0 эти настройки могут быть переопределены динамически за счет передачи в функцию session_start() массива, ключами которого являются имена директив без слова session (см. пример).
//если пользователь не будет 10 секунд посылать запросы //на сервер, его сессия будет автоматически удалена session_start(); if (isset($_SESSION)) { $difference = time() — $_SESSION; echo «От старта сессии прошло {$difference}сек»; } else { $_SESSION = ; echo ‘Создана новая сессия’; }
Заметка Параметр функции session_start() является необязательным. На практике необходимость переопределения каких-либо настроек не встречается.
Http Session Interface
Сервлеты в Java предоставляют интерфейс, известный как «HttpSessionInterface». Они состоят из различных методов, некоторые из которых обсуждаются ниже:
- public HttpSession getSession (логическое создание): этот метод получает сеанс, связанный с запросом. Если он недоступен или отсутствует, создается новый сеанс, основанный на указанном логическом аргументе.
- public String getId(): уникальный метод сеанса возвращается этим методом.
- public long getCreationTime(): время, когда был создан сеанс, возвращается этим методом. Измеряется в миллисекундах.
- public long getLastAccessedTime(): время, когда сеанс последний раз был доступен, возвращается этим методом. Измеряется в миллисекундах.
- public void invalidate(): сессия может быть признана недействительной с помощью этого метода.
Применение сессий
Вы можете получить доступ к переменной , в соответствующем отображении, через параметр ( передаётся как первый аргумент в каждое отображение). Переменная сессии является связью с определённым пользователем (или, если быть более точным, связью с определённым браузером, который определяется при помощи идентификатора (id) сессии, получаемого из куки браузера).
Переменная (или поле) является объектом-словарём, который служит для чтения и записи неограниченное число раз. С ним вы можете выполнять любые стандартные операции, включая очистку всех данных, проверку наличия ключа, циклы по данным и так далее. Большую часть времени вы будете тратить на обычные «словарные» операции — получения и установки значений.
Ниже представлены фрагменты кода, которые показывают вам как получать, задавать и удалять некоторые данные при помощи ключа «», связанного с текущей сессией (браузером).
Примечание: Одной из самых грандиозных вещей в Django является то, что вам не надо думать о механизме, который связывает сессию с текущим запросом в отображении. Во фрагменте ниже, всё что вам надо знать, это то, что связана с тем браузером, который отправил текущий запрос.
Данное API имеет другие методы, которые большей частью используются для управления куки, связанных с сессией. Например, существуют методы проверки того, что куки поддерживаются клиентским браузером, другие методы служат для установки и проверки предельных дат жизни куки, а также для очистки просроченных сессий из хранилища. Подробное описание API вы можете найти в разделе Как использовать сессии (Django docs).
Session Configurations Options
session.auto_start: автоматически начинает сессию.
По умолчанию выключена.
session.name: задаёт имя текущей сессии и сессионной куки
По умолчанию PHPSESSID.
Может быть изменено с помощью функции
session.save_path: путь по которому сохраняется информация о сессии
По умолчанию tmp директория сервера.
session.gc_maxlifetime: максимальное время жизни
По умолчанию 1440 секунд (24 минуты).
session.cookie_lifetime: время жизни куки, которая отправляется браузеру. По сути это значение, которое мы добавляем к time() когда
задаём
По умолчанию 0.
session.cookie_path: задаёт
По умолчанию ‘/’.
session.cookie_secure: задаёт
Если включить то куки будут отправляться только по HTTPS.
По умолчанию выключена.
session.use_strict_mode:
если включить то SID которые созданы не сервером будут отклонены.
По умолчанию выключена.
session.cookie_httponly: задаёт
Если включить куки будет доступна только по HTTP (и HTTPS). То есть
JavaScript
или
bbscript не смогут получить к куки доступ
По умолчанию выключена.
session.use_cookies: указывает нужно ли сохранять SID в
cookies
на стороне клиента.
По умолчанию включена.
session.use_only_cookies: заставляет сессию использовать
только
cookie
для хранения SID. Работает совместно с session.use_cookies
По умолчанию включена.
session.use_trans_sid: контролирует использование «прозрачных»
SID
Если включить — SID будет добавляться как параметр прямо в URL. Например:
Эту опцию обычно включают только тогда, когда нет поддержки
cookies
По умолчанию выключена.
Пользуйтесь trans sid с осторожностью так как это может поставить под угрозу безопасность пользователя.
- Пользователь может отправить URL содержащий активный SID другому человеку по email, irc и т.п.
- URL содержащая активный SID может быть сохранён на публично доступном компьютере.
-
— Пользователь может заходить на ваш сайт с одним и тем же SID который он сохранил в закладках или
истории браузера.
session.cache_limiter: указывает способ контроля за кэшем во время сессии.
Доступные варианты:
- nocache
- private
- private_no_expire
- public
По умолчанию
nocache.
Для сессий с
аутентификацией
нужно, чтобы кэширование в браузере было отключено.
session.cookie_samesite: контролирует доступности куки в кроссдоменных запросах.
Доступные варианты: Lax и Strict
Кросдоменные запросы могу быть не только от злоумышленников. Их может делать ваш сайт с разных поддоменов.
Либо вы можете следить за перемешением пользователя между своими проектами.