Когда я был интервьюером, я задавал многим друзьям этот вопрос: в чем разница между файлом cookie и сеансом? Большинство интервьюируемых должны уметь сказать пару слов, например: Что такое cookie? Что такое сеанс? разница между ними и т. д.
Но если углубиться в дискуссию, то постепенно некоторые друзья мало что о ней знают, а когда дело доходит до принципа, мало кто из друзей дает точные ответы. Сегодня я подробно расскажу вам о файлах cookie и сессиях.
первый этаж
Что такое файлы cookie и сеансы?Частые вопросы на собеседованиях для начинающих программистов.
Что такое файлы cookie
Файл cookie HTTP (также называемый веб-файлом cookie или файлом cookie браузера) — это небольшой фрагмент данных, отправляемый сервером в браузер пользователя и сохраняемый локально. Он будет перенесен и отправлен на сервер при следующем запросе браузера к тому же серверу. . . . Обычно он используется, чтобы сообщить серверу, исходят ли два запроса от одного и того же браузера, например, чтобы пользователь оставался в системе. Файлы cookie позволяют записывать информацию о стабильном состоянии на основе HTTP-протокола без сохранения состояния.
Файлы cookie в основном используются для следующих трех аспектов:
- Управление состоянием сеанса (например, статус входа пользователя, корзина покупок, счет игры или другая информация, которую необходимо записать)
- Настройки персонализации (такие как пользовательские настройки, темы и т. д.)
- Отслеживание поведения в браузере (например, отслеживание и анализ поведения пользователей и т. д.)
Что такое сессия
Сеанс представляет собой процесс сеанса между сервером и клиентом. Объект Session хранит свойства и информацию о конфигурации, необходимые для определенного пользовательского сеанса. Таким образом, переменные, хранящиеся в объекте Session, не будут потеряны при переходе пользователя между веб-страницами приложения, а будут сохраняться на протяжении всего сеанса пользователя. Сеанс завершается, когда клиент закрывает сеанс или когда истекает время ожидания сеанса.
второй этаж
В чем разница между файлом cookie и сеансом?
- Сфера действия разная, куки хранятся на стороне клиента (браузера), а сессии хранятся на стороне сервера.
- В зависимости от метода доступа Cookie может сохранять только ASCII, а Session может сохранять данные любого типа.Как правило, мы можем хранить некоторую общую переменную информацию в Session, например UserId.
- Срок действия разный, и куки могут храниться в течение длительного времени.Например, функция входа по умолчанию, которую мы часто используем, сессия обычно истекает на короткое время, и клиент закрывается или время сессии истекает.
- Политика конфиденциальности отличается.Куки хранятся на стороне клиента, которые проще получить нелегально.В первые дни некоторые люди сохраняли логин и пароль пользователя в куки, что приводило к краже информации, сессия была хранится на стороне сервера, а безопасность выше, чем у куки.
- Размер хранилища отличается: данные, сохраняемые одним файлом cookie, не могут превышать 4 КБ, а данные, которые могут храниться в сеансе, намного больше, чем данные файла cookie.
На содержание первых двух этажей большинство учащихся могут ответить точно
третий этаж
Зачем нужны Cookie и Session и как они связаны?
Говоря о том, зачем нужны файлы cookie, нужно начать с браузера: все мы знаем, что браузер не имеет состояния (протокол HTTP не имеет состояния), а это означает, что браузер не знает, Чжан Сан или Ли Си находятся на стороне сервера. иметь дело с. В настоящее время необходим механизм, сообщающий серверу, вошел ли пользователь в систему или нет, и какой пользователь выполняет операцию.Реализация этого механизма требует сотрудничества Cookie и Session.
Так как же файлы cookie и сеансы работают вместе? Я нарисовал картинку, чтобы вы сначала поняли.
Когда пользователь запрашивает сервер в первый раз, сервер создает и создает соответствующий сеанс в соответствии с соответствующей информацией, предоставленной пользователем.Когда запрос возвращается, уникальная идентификационная информация SessionID сеанса возвращается в браузер.После завершения Браузер получает информацию SessionID, возвращенную сервером. Эта информация будет храниться в файле cookie, и файл cookie будет записывать, какому доменному имени принадлежит этот SessionID.
Когда пользователь посещает сервер во второй раз, запрос автоматически определит, есть ли информация о файлах cookie под этим доменным именем.Если есть, информация о файлах cookie также будет автоматически отправлена на сервер, сервер получит SessionID из cookie, а затем найдите соответствующую сессию в соответствии с SessionID. Если информация не найдена, это означает, что пользователь не вошел в систему или логин недействителен. Если сессия найдена, это доказывает, что пользователь вошел в систему и может выполнять следующие операции.
В соответствии с описанным выше процессом SessionID является мостом, соединяющим Cookie и Session, и большинство систем также используют этот принцип для проверки статуса входа пользователя в систему.
Содержание третьего этажа понятно большинству учащихся.
четвертый этаж
Поскольку сервер определяет, авторизован ли пользователь на основе информации в куки, как обеспечить нормальную работу всего механизма, если куки запрещены в браузере.
В первом решении каждый запрос содержит параметр SessionID, который также может быть представлен в виде Post или может быть вставлен после запрошенного адреса.xxx?SessionID=123456...
.
Второе решение — это механизм Token. Механизм Token в основном используется в режиме взаимодействия между клиентом приложения и сервером, а также может использоваться для управления статусом пользователя на веб-стороне.
Токен означает «токен», который представляет собой строку строк, сгенерированных сервером в качестве идентификатора для клиента, чтобы сделать запрос. Механизм Token аналогичен механизму использования Cookie и Session.
Когда пользователь входит в систему в первый раз, сервер генерирует Токен в соответствии с предоставленной информацией о пользователе и возвращает Токен клиенту в ответ.В дальнейшем клиенту нужно только принести этот Токен для запроса данных, и там нет необходимости повторно входить в систему для проверки.
Содержание четвертого этажа, некоторые студенты могут объяснить ясно.
пятый этаж
Как рассматривать проблему распределенной сессии?
Чтобы поддерживать больший трафик в интернет-компаниях, бэкенду часто требуется несколько серверов для поддержки запросов пользователей переднего плана.Если пользователь входит в систему на сервере А, второй запрос направляется в сервис Б, и происходит сбой входа.
Распределенные сеансы обычно имеют следующие решения:
-
Стратегия Nginx ip_hash, сервер использует прокси-сервер Nginx, и каждый запрос распределяется в соответствии с хэшем IP-адреса доступа, так что доступ к фоновому серверу осуществляется с того же IP-адреса, что позволяет избежать явления создания сеанса на сервере A и распределения его на сервер B во второй раз.
-
Репликация сеанса, если сеанс на каком-либо сервере изменяется (добавляется, удаляется или изменяется), узел сериализует все содержимое сеанса, а затем транслирует его на все остальные узлы.
-
Общий сеанс, сервер не имеет состояния, а сеанс пользователя и другая информация управляются промежуточным программным обеспечением кэша, чтобы гарантировать согласованность результатов ответа, распространяемых на каждый сервер.
Рекомендуется третий вариант.
шестой этаж
Как разрешить междоменные запросы? Каков принцип кросс-домена Jsonp?
Говоря о междоменных запросах, вы должны понимать политику браузера в отношении одного и того же источника.Same-origin policy/SOP (Same origin policy) — это соглашение, которое было введено в браузер компанией Netscape в 1995 году. функции безопасности, если политика одного и того же источника отсутствует, браузеры уязвимы для XSS, CSFR и других атак. Так называемая гомология означает, что «протокол + доменное имя + порт» одинаковы, даже если два разных доменных имени указывают на один и тот же IP-адрес, они не гомологичны.
Распространенные способы разрешения междоменных запросов:
- Этого можно избежать с помощью прокси-сервера, например, используя Nginx для пересылки запросов на серверной части, избегая междоменных проблем во внешнем интерфейсе.
- Кросс-доменный через Jsonp
- Другие междоменные решения
Сосредоточьтесь на междоменном принципе Jsonp. Политика браузера в отношении одного и того же источника запрещает запросы из разных источников, но<script><img><iframe>
Теги являются исключением и не подпадают под действие политики одного и того же происхождения. Jsonp должен использовать<script>
Функция междоменного тега обеспечивает междоменный доступ к данным.
Идея JSONP заключается в том, чтобы согласовать имя функции обратного вызова с сервером.После того, как сервер получит запрос, он вернет кусок Javascript, вызовет согласованную функцию обратного вызова в этом коде Javascript и передаст данные в качестве параметра. Когда веб-страница получит этот код Javascript, функция обратного вызова будет выполнена, и данные будут успешно переданы клиенту.
Недостатком JSONP является то, что он поддерживает только запросы GET, а не другие типы запросов HTTP, такие как запросы POST.
Выше приведены общие пункты интервью о файлах cookie и сеансах.Я не знаю, сколько студентов могут точно ответить на все вопросы в ходе интервью.