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

Источник: thevista

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

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

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

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

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

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

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


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=22618