Вы действительно понимаете файлы cookie и сеансы?

JavaScript

Когда я был интервьюером, я задавал многим друзьям этот вопрос: в чем разница между файлом 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 и сеансах.Я не знаю, сколько студентов могут точно ответить на все вопросы в ходе интервью.