Другой вопрос был задан относительно использования IP-адресов для идентификации отдельных клиентов. Я думаю, что понимаю, почему IP-адрес недостаточно. Но как насчет сокета, который имеет больше информации и, насколько я понимаю, с состоянием? Не может ли это быть потенциально использовано вместо cookie?
17
Ответы:
Сокет идентифицирует соединение . Файлы cookie обычно используются для идентификации пользователя . Если я открою две вкладки браузера для SE.SE, у меня будет два соединения и, следовательно, два сокета. Но я хочу, чтобы мои настройки сохранялись в обоих случаях. (На самом деле, как правило, браузер открывает несколько сокетов для одной страницы, чтобы ускорить время загрузки страницы; я полагаю, что большинство браузеров имеют максимальное значение по умолчанию от 4 до 10 сокетов на страницу.)
И может произойти обратное: если я закрою вкладку своего браузера, другой пользователь на машине может открыть вкладку браузера для SE.SE и может получить такую же четверку (source_ip, source_port, target_ip, target_port), в этом случае Он получит все мои настройки.
источник
TCP-сокеты спроектированы с учетом состояния, поэтому в целом они используются для идентификации сеансов. Протоколы вроде SSH и ftp делают именно это.
HTTP разработан так, что он не имеет состояния, и каждое соединение связано только с ресурсом, который нужно загрузить. После загрузки ресурса сокет TCP, на котором работает HTTP-запрос, закрывается. Первоначальной причиной этого была простота. Но побочным эффектом является то, что HTTP-серверы, на которых работают современные веб-сайты, могут обрабатывать гораздо больше пользователей, чем серверы на основе сокетов, такие как SSH или ftp.
Поэтому сокеты не могут быть использованы, потому что HTTP закроет сокет после загрузки веб-страницы.
Конечно, говорить, что HTTP закроет сокет для каждого ресурса, слишком упрощенно, потому что в HTTP есть такие функции, как конвейерная передача и постоянные соединения, которые могут загружать несколько ресурсов на сокет. Но это только оптимизация. После того, как все загрузится, ваш браузер закроет сокет через некоторое время.
Первоначально HTTP был разработан как простой протокол для загрузки файлов HTML. Старые браузеры также могут загружать HTML-файлы из других протоколов, таких как Gopher и ftp. Таким образом, не было никаких причин делать HTTP сохраняющим состояние, потому что HTML-файлы - это просто текстовые файлы.
Как только веб-формы были введены и HTML-страницы могут отправлять данные обратно на сервер, веб-страницы начали нуждаться в сеансах. Таким образом, файлы cookie были созданы для повторного введения состояния в протокол без сохранения состояния, который передается через уровень передачи с отслеживанием состояния, который передается через сетевой уровень без сохранения состояния. Итак, полные прикладные уровни:
В наши дни у нас есть веб-сокеты, которые могут хранить один открытый сокет от вашей веб-страницы до сервера. Таким образом, с веб-сокетами вы снова можете использовать сокеты для идентификации пользователя, потому что веб-сокет сам по себе является состоянием. Но в большинстве случаев вам все равно понадобится файл cookie для главной html-страницы, которая загружает JavaScript, запускающий веб-сокет.
источник