//
//
Сессии
//
- session_start(array $options = []): bool возобновляет существующую сессию или создает новую
/
PHP:
1 2 3 4 5 6 7 8 9 |
session_start(); ... // login $_SESSION['username'] = $username; setcookie('username', $username, time() + 3600*24*7); ... // logout setcookie('username', '', time() - 1); unset($_SESSION['username']); |
/
JS от GPT:
1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="hljs-keyword">function</span> <span class="hljs-title function_">getCookie</span>(<span class="hljs-params">name</span>) { var cookies = document.cookie; var cookiesArray = cookies.split(";"); for (var i = 0; i < cookiesArray.length; i++) { var cookie = cookiesArray[i].trim(); if (cookie.indexOf(name + "=") === 0) { return decodeURIComponent(cookie.substring(name.length + 1)); break; } } return false; } |
/
JWT
//wikipedia.org/wiki/JSON_Web_Token
JWT: Debugger | Libraries | Introduction //jwt.io
Это открытый стандарт (RFC 7519) для создания токенов доступа, используя JSON, Base64 и алгоритм шифрования (например SHA256).
Как правило, токен используется в заголовке Authorization в JavaScript запросе через XMLHttpRequest или Fetch API.
Джерела
Как использовать сессии и переменные сессий в PHP //code.tutsplus.com
https://qna.habr.com/q/801597
granty @granty
Сессия - это Кука с именем PHPSESSID (по умолчанию, его можно изменить) и значением вида 8jae35cosacp2f5qv6g2uqe6i7. Все данные сессии (массив $_SESSION) хранятся на стороне сервера в файле с именем 8jae35cosacp2f5qv6g2uqe6i7 в формате JSON (можно хранить и в БД).
То есть, вам надо не дописывать 1, а угадывать это имя, что нереально.
У Куки можно установить флаг HttpOnly - такие Куки не видны браузерному коду (яваскрипту), а только отправляются на сервер. Внедрённый на страницу вряжеский яваскрипт не сможет получить доступ к такой Куке.
Куку можно перехватить во время передачи по сети, для защиты от этого есть механизмы:
- установить заголовок HSTS, это заставит браузер работать только по HTTPS, те Кука будет зашифрована при передаче по сети.
- в самой сессии можно хранить IP адрес(привязка сессии к IP). Тогда даже с правильной Кукой не залогиниться, поскольку не совпадет IP (который хранится в $_SESSION на стороне сервера). Неудобно если провайдер меняет IP при каждом переподключении.
- можно в сессии хранить User Agent (все равно Кука - она только для этого браузера). Но при автоматическим апдейте браузера придётся авторизоваться заново, и у кого хватило ума перехватить Куку - перехватит и имя User Agent-а.
- можно в сессии хранить fingerprint браузера (или даже всего компа), только надо придумать как безопасно передавать его на сервер, чтобы сохранять в сессии (и для сравнения при авторизации). Его же тоже могут перехватить.
- при каждой авторизации по Куке, и через каждые ## секунд можно(и нужно) делать session_regenerate_id (меняется 8jae35cosacp2f5qv6g2uqe6i7 на другое), там по ссылке есть пример как это сделать прямо внутри сессии. То есть, угнанная Кука быстро перестаёт работать.
- можно делать "сессионную" Куку (не указывать её время жизни). Такая Кука живёт до закрытия браузера, но после закрытия браузера придётся заново вводить логин/пароль
Можно добавить своей безопасности - например отправлять email пользователю при каждой авторизации по Куке, если не было активности Пользователя более 12 часов.
PS: Если пользоваться сессиями правильно - они достаточно безопасны, практически вся авторизация в интернетах построена на них.