(не)преимущества сеансов по сравнению с файлами cookie

Мне нужны некоторые подробности о сессиях. Каковы недостатки переменных сеанса? Между файлами cookie и сеансами, что лучше?


person chakku    schedule 04.03.2011    source источник


Ответы (2)


Я не буду касаться здесь безопасности, так как Infotekka уже довольно много этим занималась. Похоже, вы спрашиваете, следует ли вам использовать SESSION или COOKIE, как будто они являются альтернативами друг другу.

Они не. Они серверные (это была опечатка… но я оставляю это, потому что это хороший каламбур) для разных целей.

Поскольку HTTP не имеет состояния, PHP (и другие) предлагают возможность имитировать конечный автомат в вашем приложении с помощью сеанса. Если бы вы этого не сделали, вам пришлось бы использовать POST/GET между каждой страницей, чтобы данные были согласованными, и если пользователь перейдет на другую страницу самостоятельно, данные будут потеряны! Таким образом, без SESSION вы не сможете зарегистрировать пользователя на своем сайте ... по крайней мере, не очень последовательно.

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

Я полагаю, вы могли бы использовать COOKIE для этого, но это намного сложнее, чем cookie, особенно при работе с объектами, сериализованными в сеанс. Установленные файлы COOKIE также недоступны до загрузки следующей страницы и должны быть установлены до любого вывода сценария (как и любой другой заголовок).

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

Файлы cookie следует использовать для хранения простых данных в течение длительного периода времени. Если они часто посещают веб-сайт, они могут захотеть, чтобы их имя пользователя запомнилось им, чтобы оно могло быть сохранено в виде файла cookie. Просто помните о проблемах безопасности, отмеченных Infotekka.

РЕДАКТИРОВАТЬ: Наконец, я должен добавить, что файлы COOKIE передаются при каждом запросе страницы между пользователем и браузером. Больше файлов cookie означает большее время загрузки страницы.

person Explosion Pills    schedule 04.03.2011
comment
Очень хорошее замечание о фактической невозможности надежного хранения данных между сообщениями/получениями. - person Infotekka; 04.03.2011

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

Есть некоторые страшные программы, такие как firesheep, которые могут показать вам, насколько легко получить идентификатор сеанса и сделать его своим. Если вы собираетесь основывать какую-либо безопасность на этом сеансе, вам нужно убедиться, что ВСЕ, что вы делаете, осуществляется через SSL, и вы должны создать какой-то второй уровень проверки, чтобы убедиться, что ваш сеанс не был взломан.

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

person Infotekka    schedule 04.03.2011
comment
Правильное замечание, но этот аргумент работает даже лучше против файлов cookie, чем против сессий. - person gnur; 04.03.2011
comment
Согласен, но без куки сессии нет - person Infotekka; 04.03.2011
comment
Этот ответ подразумевает, что вы не должны использовать сеанс из-за того, как легко его перехватить из-за файла cookie PHPSESSID.. что, в свою очередь, подразумевает, что вы должны использовать файлы cookie, но это не имеет смысла из-за того, насколько легко / предназначены для захвата.. Это поднимает хороший вопрос о безопасности, но не обсуждает сеансы и файлы cookie.. - person Explosion Pills; 04.03.2011
comment
Я думаю, вы упускаете суть: для того, чтобы PHP мог идентифицировать владельца сеанса, он записывает куки-файл клиенту - я никогда не имел в виду, что вместо этого следует использовать другие куки-файлы, только то, что вы должны знать об этом уязвимость и защитите ее с помощью SSL. - person Infotekka; 04.03.2011
comment
@tandu to infotekkas указывает, что дальнейшее действие будет заключаться в том, чтобы также не использовать имя файла cookie PHPSESSID по умолчанию, поскольку это то, на что будет смотреть угонщик. Несмотря на это, нет более безопасного пути, чем использовать SSL. - person a.stgeorge; 04.03.2011
comment
Я не говорю, что Infotekka ошибается, он просто не ответил на вопрос, который якобы просил альтернативу сеансам (например, файлы cookie). Я не собираюсь минусовать это или что-то еще, хотя ... это хорошие горшки. @a.stgeorge перечитал свой пост внимательнее. Люди могут одинаково захватить /любой/куки, независимо от того, является ли он PHPSESSID или нет, потому что все куки отправляются как обычные заголовки. - person Explosion Pills; 04.03.2011
comment
-1: Во-первых, файлы cookie и сеансы не являются взаимозаменяемыми, во-вторых, страшны не такие программы, как firesheep, а количество плохо написанных сайтов, которые они могут скомпрометировать. И мне было бы очень интересно услышать, что вы думаете о втором уровне безопасности. Сеанс — это не место для хранения данных, относящихся к совокупному пользовательскому опыту, — только для текущего сеанса. - person symcbean; 04.03.2011
comment
Не забывайте о других функциях защиты сеанса, таких как session_regenerate_id. - person GordonM; 04.03.2011