что было бы лучше при внедрении сеансов системной логики php или файлов cookie?
Файлы cookie браузера:
PHP-сессии:
PHPSESSID
PHP в фоновом режиме создают куки-файл (по умолчанию называется PHPSESSID
, настраивается с помощью session_name () ), поэтому вы используете файлы cookie в любом случае. Сеансы могут быть настроены так, чтобы не использовать куки-файлы, однако это довольно сложное обходное решение с тех пор, когда поддержка файлов cookie была на самом деле проблемой. Что он делает: перезаписывает все URL-адреса, которые он может найти в выводе, добавляя к ним ?PHPSESSID=your_session_id
. Проблемы: он пропустил некоторые URL-адреса, и URL-адрес выглядит уродливым (IMHO). Я не видел PHP-сессию без cookie в течение длительного времени (с 2002 года или около того).
PHP-сессии не совпадают с файлами cookie, однако в конфигурации по умолчанию они используют куки-файл для хранения указателя «указатель» / «указателя» к вашим данным сеанса. Данные сеанса хранятся на сервере PHP, когда у вас есть существующий идентификатор сеанса, скрипт получает доступ к соответствующим данным; тогда как с помощью чистого куки-файла вам нужно будет сохранить данные в самом файле cookie. Файлы cookie ограничены по размеру и отправляются на каждый запрос страницы, поэтому имеет смысл отправлять только куки-файлы в несколько байтов и хранить данные на сервере.
Пример:
$_COOKIE: { 'PHPSESSID' => 'a123456ebdf123' } $_SESSION: { 'user_name' => 'Piskvor', 8 => 'sadfsadfsdf', 'huge block of text' => '(a huge block of text could be here, as PHP sessions can usually be bigger than the measly 4K allowed for a cookie)' } /tmp/php_sessions/sess_a123456ebdf123 (a file on server, note the name): (whatever you see in $_SESSION above, passed through serialize())
Это также означает, что вы никогда не должны хранить данные cookie, которые вы не хотите видеть или изменять, например, если ваш код задает cookie, logged-in-user: Piskvor
или даже is-admin: 1
, есть вы не можете помешать пользователю делать то же самое со встроенными инструментами браузера. Хранение этого в переменной сеанса более безопасно, поскольку данные непосредственно не отображаются пользователю, за исключением случаев, когда ваш код позволяет – все, что видит пользователь, – это идентификатор сеанса (идентификаторы сеанса не идеальны, либо см. «Захват сеанса») – но они более безопасны, чем файлы cookie).
Редактирование толпы TL; DR: при использовании сеансов они обычно поддерживаются куки-файлами, но они не одно и то же. Я бы рекомендовал использовать сеансы (по причинам, изложенным выше, знать, что это обычно означает «через файлы cookie»).
Файлы cookie хранятся в браузере пользователя. Сеансы хранятся на стороне сервера.
Если у вас есть ЛЮБАЯ конфиденциальная информация, никогда не помещайте их в файл cookie, так как пользователь или кто-то с доступом к их компьютеру может делать с ними всевозможные неприятные вещи.
Если вы принимаете какие-либо решения – например, решить, кто-то вошел в систему или имеет доступ администратора, вы можете использовать файл cookie, а затем сопоставить его с сеансом с интересными / важными битами.
Хотя вы можете установить срок действия файлов cookie, поскольку они хранятся в браузере, которые всегда могут быть настроены гнусным пользователем. Я уже скорректировал свои собственные файлы cookie, чтобы никогда больше не приходилось регистрироваться. 😉 Поскольку сеансы являются серверными – и не нужно делиться с пользователем – вы можете быть уверены, что сеанс истекает, когда вы хотите.
Хотя вам нужно знать о фиксации сеанса или повторных атаках … так что они тоже не идеальны.
Сохранить в файлах cookie:
И при проверке подлинности, если хэш user_id равен хешу, хранящемуся в файлах cookie. Таким образом, вам не нужно хранить что-либо на стороне сервера.
лучше? ни.
HTTP – это протокол без учета состояния (без сеанса) для создания какого-либо сеанса, в котором вы можете использовать cookie (хранить значения на стороне клиента в cookie и передавать их с каждым запросом) или передавать значения в качестве параметров URL (например, sessionID = 2358734578}.
Сессии PHP просто назначают каждому клиенту sessionid и хранят его в cookie, это действует как идентификатор для клиента (вы также можете настроить его для использования параметров URL тоже).
Таким образом, в основном вы можете использовать встроенную реализацию PHP-сессии, которая хранит все на стороне сервера, дает клиенту идентификатор для передачи cookie, а затем предоставляет вам способ получить данные для этого сеанса на основе указанного идентификатора (который передается через cookie) – или вы можете придумать свою собственную систему (которую вы назвали «использованием файлов cookie»), но в конечном итоге это не может быть лучше », хотя в качестве би-продукта вы можете понять, как работает HTTP, что мало немного более 🙂
см. также ответ на вопрос CaseySoftware в отношении соображений безопасности.