Чтобы избежать этой проблемы, я делаю перенаправление, чтобы добавить короткий, произвольный идентификатор входа в URL.
Затем, вместо непосредственного использования сеанса, я сохраняю строго типизированный объект в переменных сеанса подслучайный in-url-код и использовать этот объект для хранения сеанса.Если вы хотите сохранить простоту, вы можете использовать словарь.В дополнение к обычному тайм-ауту сеанса вы должны следить за последним использованием каждого идентификатора входа в систему и вручную устанавливать тайм-аут сеанса, если он слишком старый, чтобы новые пользователи не могли сохранить старые логины.
По существу, тогдакаждый сеанс ASP.NET соответствует любому количеству сеансов входа в систему.
Это имеет следующие преимущества:
- Вы можете войти в систему как несколько пользователей одновременно.Это удобно для многих сайтов.
- В общественных терминалах это помогает избежать случайного перехвата сеанса.Когда пользователь покидает общедоступный терминал, закрывает вкладку веб-приложения, но не браузер (что является довольно распространенным явлением), а затем другой пользователь подходит к этому терминалу и открывает новое окно или вкладку для вашего сайта, этот новый пользователь не видит следов ранее зарегистрированногов пользователя.Конечно, пользователи должны выйти из системы, и любой может проверить историю, но нет никаких оснований для приглашения злоупотреблений.
- CSRF атак противВаш сайт немного сложнее, так как URL без случайного идентификатора входа не имеет смысла.
- Реализация довольно проста, если вы используете хеш-таблицу - в конце концов, любой пользователь состояния сеанса уже написан для хранения и извлеченияданные из хеш-таблицы, вам просто нужно изменить хеш-таблицу, которую он использует, и в идеале она должна включать настраиваемое время ожидания.
Очевидным недостатком является то, что вам нужно включить случайный код в URL;и что вам нужно немного дополнительной реализации.Вы можете скрыть дополнительный код, используя сайт на основе iframe и / или javascript + XHR, но это намного более инвазивное изменение сайта.Наконец, обратите внимание, что сеансы без cookie - это не одно и то же;хотя их проще включить, они содержат гораздо более длинный, менее понятный человеку маркер URL-адреса, и из-за отсутствия обычного маркера сеанса cookie также менее безопасны по сравнению с перехватом сеанса (поскольку внезапно любая другая программа или даже машина, которая обнаруживаетID сеанса может выдавать себя за этого пользователя).