2010-02-15 5 views
14

Я получил vibe, используя переменную сеанса, вроде как смотрел вниз в ASP.NET MVC.asp.net mvc - где хранить идентификатор пользователя - целое?

Когда пользователь входит в систему, я хотел бы сохранить USERID пользователя, так что я не должен запрашивать его все время и т.д.

Что является наиболее эффективным способом сделать это в ASP.NET MVC ?

ответ

18

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

+0

Спасибо! * комментарий наполнитель *. –

+2

Вибрация от людей, неправильно использующих Session в качестве аутентификации, что и делает progtick. – jfar

+1

Я думал, что поставщик членства/профиля обработал все это для вас, и его использование поощряется Microsoft. Они даже включают пример в пример приложения. –

0

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

+1

«Но ничего больше не работает для учетных данных» Что? Как файлы cookie и FormsAuthentication? Cookies на 1000% стабильнее, чем Session. – jfar

+0

Почему вы не можете просто проверить сеанс и повторить вход пользователя, если он недоступен? Я не совсем понимаю, почему куки лучше. –

+0

И я не спорю - я действительно хотел бы узнать об этом больше. –

2

Сеансы предназначены для использования в режиме пользовательского взаимодействия - на ум приходит покупка. Они смотрят сверху вниз, потому что они болезненны для тестирования и имеют тенденцию вставлять логику сериализации в контроллер. Если вы просто хотите минимизировать запросы, вы должны использовать кеширование.

EDIT: Учебники для HttpContext.Cache на удивление трудно найти. Стивен Сандерсон имеет ~ 4 страницы в Pro ASP.net MVC Framework (Apress 2009) с. 530-534.

Caching in asp.net-mvc может дать вам некоторые подсказки.

+0

Вы можете разместить ссылку на asp.net mvc caching? – TPR

8

Вы получили правильную атмосферу. Это просто необязательно во многих сценариях. Состояние сеанса может быть легко потеряно и часто неправильно используется для обработки зарегистрированного пользователя (настройка этого пользователя выполняется путем установки Session ["IsLoggedIn"] = true или путем проверки сеанса [«Пользователь»]! = Null, внезапно сеанс исчезает и пользователь выйдет из системы), когда должна использоваться аутентификация форм. Здесь вы можете прочитать о проверке подлинности форм и хранения дополнительных данных с ним:

Forms Authentication Configuration and Advanced Topics

Если вы все еще хотите использовать сеанс, это хорошо, чтобы создать оболочку, чтобы сделать его более проверяемым и избавиться от строк в коде:

Wrapper for ASP.NET Session

+0

Не могли бы вы использовать формы auth, а затем сохранить имя пользователя и т. Д. В сеансе? –

+1

@ d03boy: имя пользователя хранится в файлах cookie для проверки подлинности по умолчанию.Вы можете добавить идентификатор пользователя. Если вы потеряете сеанс (и это может произойти во многих ситуациях, например, когда кто-то меняет web.config), у вас есть данные в надежном месте и их не нужно перестраивать. Хорошо, вы можете использовать сеанс, но помните, что он может быть потерян при входе пользователя в систему. – LukLed

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