2009-03-30 3 views
0

У моего клиента был аудит безопасности системы, которую я построил для них.Управление сеансом пользователя в asp.net

Они хотят, чтобы он работал таким образом, чтобы при входе пользователя через Internet Explorer при входе в систему через Firefox на одном компьютере (или через IE на другом компьютере), что он убивает первый сеанс.

По существу это означает сохранение информации о сеансе в БД, которую я мог бы себе представить, а затем установить для нее активный/неактивный флаг, так что идентификатор пользователя, идентификатор сеанса, статус, если у пользователя есть активный сеанс, затем убить первый сеанс и создать новый сеанс ,

Существуют ли какие-либо встроенные механизмы для этого с платформы .NET или может кто-нибудь мне точку в направлении некоторых учебных пособий и т.д.

Большое спасибо,

Ed

+0

Можете уточнить пожалуйста. Если пользователь входит в систему с другого компьютера/браузера, их сеанс в других браузерах прекращается и продолжается в новом браузере? –

+0

Да, правильно - пользователь входит в систему с другого компьютера/браузера, и их сеанс в других браузерах прекращается и продолжается в новом браузере. –

+0

@Ian: Я согласен, что «Spec» слишком свободен. Что, если используется другой экземпляр IE? IOW, мы говорим, что универсальный только один процесс браузера может иметь активный сеанс для пользователя? – AnthonyWJones

ответ

2

Во-первых, добавить поле в таблицу ваших пользователей для хранения текущего идентификатора сеанса. Этот идентификатор легко доступен из вашего кода. Когда пользователь входит в систему, сохраните этот идентификатор.

В каждом запросе страницы проверьте, совпадает ли текущий идентификатор сеанса с тем, что было сохранено в вашей пользовательской таблице. Если он не соответствует, затем очистите текущие данные сеанса и отбросьте пользователя обратно на экран входа в систему.

Это не помешает пользователю использовать несколько вкладок в IE 7, поскольку IE7 использует один и тот же экземпляр для каждой вкладки; но это не позволит им использовать несколько экземпляров браузера.

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

Кстати, это не очень эффективное средство устранения захвата сеанса; что звучит так, как пытается предотвратить аудит безопасности. Если вам нужно это сделать, обновите свой вопрос, и я пойду дальше.

UPDATE

Один из способов остановить угон сессий для хранения случайное число в сессии и куки в браузере. Когда появится следующий запрос, убедитесь, что значения cookie и сеанса совпадают. Если они не перезагружают переменную идентификатора сеанса в вашей пользовательской таблице. Это заставит все сеансы снова войти в систему. Для каждого запроса страницы (post/get) создайте новое случайное значение. Недостатком является то, что страницы не могут быть отмечены закладкой; но это, вероятно, приемлемо.

+0

спасибо за предложение - это может сработать, но я бы хотел, чтобы «новый» сеанс перекрывал «старый», поэтому пользователь не выходил из игры. Но если они вернутся к исходному браузеру/ПК и обновятся или попытаются получить доступ к чему-то, они будут отброшены на вход –

+0

. Именно это и будет сделано. При каждом входе в систему просто обновляйте таблицу пользователя с последним идентификатором сеанса. Когда старый получает сообщение или он увидит, что он не является текущим, вы перенаправляетесь на экран входа в систему. – NotMe

+0

Ред, это в основном то, что я сделал. Последнее в выигрыше, в противном случае вам нужно подождать, пока их сеанс перейдет в режим тайм-аута, прежде чем позволить им войти в систему. – JoshBerke

0

I blogged о том, как я справляюсь с этим. В основном идея заключается в том, что мы создаем непостоянный файл cookie, в котором есть Guid.

Затем мы храним эту привязанную к userId в некотором месте на сервере (кэш приложений, БД и т. Д.). Затем у нас есть poller, который попадает на сервер каждые пару минут, и если cookie не соответствует значению, мы выходим из системы.

+0

@Josh - хороший подход - конечно, дал мне пищу для размышлений –

Смежные вопросы