Различия между куки и сессиями?

154

Я занимаюсь веб-разработкой и изучаю JSP & Servlets . У меня есть кое-какие знания HttpSession- я использовал их в некоторых моих типовых проектах.

В браузерах я видел опцию «удалить куки». Если я удаляю куки, он также удаляет HttpSession.

Являются ли куки и сессия одинаковыми? Каковы различия между ними?

черный тигр
источник
Также смотрите этот вопрос: < stackoverflow.com/questions/356562/… > В частности, замечания о подписанных куки.
Джоэл Коухорн
Я думаю, что второй ответ на этот вопрос более уместен. Если вы выберете это как лучший ответ, многие будут его читать.
Сурадж Джейн

Ответы:

180

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

Большинство современных сайтов используют второй подход, сохраняя идентификатор в куки-файле вместо передачи его в URL-адресе (что создает угрозу безопасности). Вероятно, вы используете этот подход, не зная его, и, удаляя файлы cookie, вы фактически стираете их соответствующие сеансы, удаляя уникальный идентификатор сеанса, содержащийся в файлах cookie.

Эран Гальперин
источник
10
« передача его в URL (который представляет угрозу безопасности). » на самом деле оба подхода имеют риски безопасности (разные). Secret-ID в URL-адресе может быть защищен, если все сделано правильно, и если пользователь понимает, что URL-адрес является секретным и не может быть опубликован на общедоступном форуме.
любопытный парень
1
«Идентификатор может быть передан в URL или сохранен в файле cookie сеанса». , Куда? на стороне клиента или сервера? спасибо за разъяснение больше.
Адиб Аруи
4
@whitelettersandblankspaces Файл cookie сеанса хранится на клиенте (и его значение содержит уникальный идентификатор сеанса, который отправляется при каждом запросе для сопоставления сеанса браузера с сеансом пользователя на сервере).
WynandB
306

Файл cookie - это просто короткая текстовая строка, которая отправляется между клиентом и сервером. Вы можете сохранить name=bob; password=asdfasфайл cookie и отправить его туда и обратно, чтобы идентифицировать клиента на стороне сервера. Вы могли бы думать об этом как о продолжении обмена с кассиром банка, который не имеет краткосрочной памяти и нуждается в вашей идентификации для каждой транзакции. Конечно, использование cookie для хранения такой информации ужасно небезопасно. Размер файлов cookie также ограничен.

Теперь, когда кассир банка узнает о своей проблеме с памятью, он / она может записать вашу информацию на листе бумаги и назначить вам короткий идентификационный номер. Затем вместо того, чтобы указывать номер своей учетной записи и водительские права для каждой транзакции, вы можете просто сказать «Я клиент 12»

Перевод этого на веб-серверы: сервер сохранит соответствующую информацию в объекте сеанса и создаст идентификатор сеанса, который он отправит обратно клиенту в файле cookie. Когда клиент отправляет обратно cookie, сервер может просто найти объект сеанса, используя идентификатор. Таким образом, если вы удалите куки, сеанс будет потерян.

Еще одна альтернатива для сервера - использовать перезапись URL для обмена идентификатором сеанса.

Предположим, у вас есть ссылка - www.myserver.com/myApp.jsp вы можете пройти по странице и переписать каждый URL как www.myserver.com/myApp.jsp?sessionID=asdfили даже www.myserver.com/asdf/myApp.jspи обменять идентификатор таким образом. Этот метод обрабатывается контейнером веб-приложения и обычно включается настройкой конфигурации на использование сеансов без файлов cookie.

Крис Кадмор
источник
29
Это замечательное объяснение, основанное на великой аналогии с реальным миром. Этот ответ должен быть одобрен гораздо больше. Очень доступно для новичков, которые чаще всего задают такой вопрос.
user798719
2
Что произойдет, если я пользователь, а кто-то еще узнает мой идентификатор сеанса?
Мария Инес Парнисари
3
@ I19 Возможно, они могут выдать себя за тебя. Это происходит в сценариях с азартными играми в Интернете - прослушайте Wi-Fi в отеле, украдите идентификатор сеанса и получите доступ к учетной записи. Защита сессии - это совсем другая история.
Крис Кадмор
2
Итак, кто первым создает cookie? Сервер или клиент? Или это зависит от приложения? (Я бы сказал, сервер, поскольку в противном случае он представляет угрозы безопасности, но я думаю, что стоит упомянуть?)
nha
4
@nha Сервер создает сеанс и передает его в ответе с cookie. Сеанс создается в зависимости от логики приложения, когда вы хотите его создать. Клиент также может создать cookie-файл, но он может оказаться бесполезным в сценарии идентификации сеанса, поскольку сервер может не знать, что представляет значение в сеансе.
Азим
4

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

санджай сингх
источник
1

Cookie - это глобальный массив, доступ к которому осуществляется через веб-браузеры. Много раз используется для отправки / получения значений. он действует как механизм хранения для доступа к значениям между формами. Куки могут быть отключены браузером, который добавляет ограничение на их использование по сравнению с сессией.

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

RishikeshD
источник
0

Google JSESSIONID . Это объяснит, как Servlet API изначально использует перезапись URL, а затем, если куки включены, куки для управления сессиями.

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

Ник Холт
источник
0

Сессия в Asp.net:

1. Сохраняет данные по всему приложению.

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

3.Сессии - это файлы на стороне сервера, которые содержат информацию о пользователе. [Сессии являются уникальным идентификатором, который сопоставляет их с конкретными пользователями]

Перевод этого на веб-серверы: сервер сохранит соответствующую информацию в объекте сеанса и создаст идентификатор сеанса, который он отправит обратно клиенту в файле cookie. Когда клиент отправляет обратно cookie, сервер может просто найти объект сеанса, используя идентификатор. Таким образом, если вы удалите куки, сеанс будет потерян.

Vicky
источник
0

Cookie - это способ реализации сеанса между клиентом и сервером, таким образом информация о сеансе сохраняется в cookie. Но это не единственный способ хранения информации о сеансе, другой способ - сохранить информацию о сеансе в URL.

lessisawesome
источник
0

Файлы cookie хранятся в браузере в формате текстового файла. Хранится ограничение на количество данных. Разрешается только 4 КБ [4096 байт] . Переменная $ _ COOKIE не будет содержать несколько файлов cookie с одним и тем же именем.

мы можем легко получить доступ к значениям cookie. Так что это менее безопасно . Функция setcookie () должна появляться ДО

<html> 

тег.

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

Ссылки: разница между ними-печеньем-и-сессий

Elangovan
источник
Ну, на самом деле вы можете хранить несколько данных в куки. Кроме того, сессии не могут содержать неограниченное количество данных. Вы в значительной степени ограничены объемом оперативной памяти, которая у вас есть.
Корай Тугай