Реклама:

Использование кэша

puSlic static striog[] GetRolesFo'-UserCacied(st'ing username) {

stringf] roles = null; HttpCoitexi context = HTtpContext.C'J-'rent;

// проверяем, кэшированы ли уже роли и не закончился ли срок их действия

if (context.Cacbe[userrame] " null)

{

// Переход в случае удаления или блокиоов^и пользователя

// позволяет выполнить действие try

{

roles = GetH"olesForUser(useniame);

)

catch {

t hr ow:

}

// кэширование ролей context.Cache.Insert(

username,

roles,

null,

Dateline. Now. AacMnutes(30). Cache.NoSlidingExpiration);

>

return (strTng[ Dcortext. Cachet user name];

}

Кэширование ролей в билете Кэширование ролей в билете дает некоторые преимущества, поскольку билет является независимым и для его хранения не требуется место на сервере. Для хранения ролей и их извлечения для каждого запроса вы можете использовать поле userData билета. Таким образом, вам не нужно будет обращаться при каждом запросе к базе данных, и вы сможете воспользоваться преимуществом уже существующих механизмов шифрования и защиты целостности, используемых в аутентификации Forms. Поле userData представляет собой строку. Вам нужно перевести массив ролей в последовательную форму строки с разделителями и снова создать массив в событии Post Authenticate Request.

Размер файлов cookies ограничен 4 Кбайт. Для данных, определяемых пользователем, это составляет приблизительно 1200 байт. Помните об этом ограничении, поскольку при достижении максимального размера данные отсекаются. Если объем данных превышает установленные пределы, используйте для хранения ролей кэш ASP.NET.

Р,ТЛ ПРИМЕЧАНИЕ Все представленные здесь концепции, например, кэширование ролей в билете, срок действия кэша и обработка недействительных данных, уже реализованы и готовы к использованию в новом менеджере ролей из ASP.NET 2.0. Если вы хотите написать собственную инфраструктуру (или лучше понять принцип работы менеджера ролей), воспользуйтесь представленной здесь информацией. В противном случае я рекомендую написать провайдер ролей и использовать менеджер. Болев подробную информацию по з-им вопоссам вы найдете в -гаве 6

В регистрационной странице вы извлекаете роли для пользователя и сохраняете их в билете аутентификации.

Кэширование ролей в билете

protected void PtnLogin_Click(oDject sender, EventArgs e) {

if (AutnenticationHelper.Val:dateUser( _txtUsername.Text. txtPassworo Text))

I

// Извлечение ролей

string[] roles = ALfenticaTionHelpe'.GetRolesForUser (_TxtUsemame.Text);

// Кодирование ролей а сроке с разделителями string rolesS.ring = string. Join(" |", roles);

// Создание билета аутентификации FormsAuthenticationTicket tic«et = FormsAuthHelper.CreateAuthenticationTicket LtxtUsername.Text, roiesString);

// Вьдача билета аутентификации FormsAuthHelper.SetAuthenticationCookie{ticker);

// Переналоааление на изначально запрашиваемый ресурс Response.Recirect

{ForTisAutherticaticn.GetRedirectUrKstnng.Empty, false));

}

else

_litMessao,e.Text = "Login failed, please try again";

Вместо того чтобы отправлять запросы к базе данных, вы теперь можете извлекать роли из билета в Post Authenticate Request.


⇐ Предыдущая страница| |Следующая страница ⇒