Jaa


Сеансовые сookies, sessionStorage, IE8 или «Как запустить одновременно два сеанса онлайнового почтового клиента?»

В Internet Explorer 8 управление сеансами браузера реализовано много проще, нежели в предшественнике. Например, вы собираетесь работать с двумя окнами Hotmail, в каждом из которых используете различные учётные записи. Выбрав опцию «Новый сеанс» (New Session) из меню «Файл», вы откроете новое окно браузера. Это окно не будет пользоваться тем же списком файлов cookies, что и прежнее, поэтому вы можете войти в Hotmail (как и в большинство прочих веб-приложений) под другой учётной записью. Приверженцам командной строки предлагается запустить iexplore.exe с параметром -nomerge.

Напротив, если вы просто запустите «Новое окно», «Создать вкладку» или «Создать копию вкладки» из того же меню «Файл», или с помощью ярлыка на рабочем столе, новая вкладка или окно обратится к тем же файлам cookies, что и родительское. Эта процедура называется «слиянием сеансов».

Почему браузеры задействуют слияние сеансов?

Корректное управление слиянием сеансов очень важно, поскольку многие веб-приложения созданы таким образом, что предполагают наличие такой возможности. Например, когда веб-приложение открывает всплывающее окно, оно обычно исходит из того, что это окно будет использовать те же файлы cookies, что и основное, так что пользователь останется внутри уже запущенного сеанса со всеми своими настройками и т.п. Точно так же, когда пользователь инициирует команду «Создать копию вкладки», веб-приложение закономерно ожидает, что копия покажет то же самое содержимое, что и оригинал. Для того, чтобы такой сценарий заработал, необходимо использование одних и тех же файлов cookies.

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

Предположим, пользователь покупает разные авиабилеты в двух разных окнах, используя один и тот же сайт. Если сайт использует файлы cookies для того, чтобы отслеживать какой именно билет приобретается, а пользователь в это время переходит по различным ссылкам то в одном окне, то в другом, приобретаемый в данный момент билет может «перетечь» из одного окна в другое, что, в свою очередь, приведёт к покупке двух одинаковых билетов, а пользователь этого даже не заметит.

Поэтому в HTML5 функция sessionStorage разработана таким образом, что вкладки в рамках одного сеанса всё равно используют разные, независимые контейнеры. Если изменить атрибуты sessionStorage в одной вкладке, это не отразится на другой вкладке, даже в рамках единого сеанса. Напротив, атрибут localStorage ведёт себя практически так же, как и сохраняемые на диске постоянные файлы Cookies, – изменения атрибутов localStorage отражаются во всех вкладках браузера во время активного (и будущих) сеансов.

Я подготовил специальную тестовую страницу, на которой можно опробовать слияние сеансов и запуск нового сеанса для IE8: https://www.enhanceie.com/test/sessions/

Эрик Лоуренс (Eric Lawrence)