мне нужно больше данных на определенных страницах
в зависимости от того, что делает пользователь. право
сейчас я использую сессии, но теперь я хочу
переместить все в куки.
это не много данных, поэтому я решил, что я
может вложить все в
аутентификационный билет / печенье
@ jorsh1, основываясь на вашей рекомендации @Portman, Ticket.UserData не место для хранения изменяющихся данных. Вы не хотите заново создавать билет аутентификации при переходе с одной страницы на другую.
Либо используйте данные сеанса с службой сеансов или Sql Server . Если вы не хотите, чтобы данные в сеансе были небольшими и не чувствительными, используйте cookie. (*)
Канонический пример MS с UserData - хранить такие вещи, как список ролей, чтобы вы могли сказать что-то вроде «Думаю ли я, что этот пользователь - администратор», но если это что-то вроде роли администратора, вы, вероятно, нажмете базы данных, чтобы проверить, прежде чем вы неявно доверяете тому, что находится в куки.
string plainTextUserData = fid.Ticket.UserData;
Это работает внутри вашего приложения только потому, что Asp.Net уже расшифровал билет для вас. Однако, если вы хотите установить данные IIRC, вам необходимо заново создать и снова подключить cookie проверки подлинности форм.
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
currentTicket.Version + 1,
currentUser.UserName,
now,
now.Add(formsAuthentication.Timeout),
false,
"new user data string",
FormsAuthentication.FormsCookiePath);
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(
FormsAuthentication.FormsCookieName,
hash);
Response.Cookies.Add(cookie);
Другое приложение не может декодировать этот билет, если он не знает ключ дешифрования или он был взломан. Если вы балансируете приложение или используете веб-сады, вам даже нужно синхронизировать ключи.
* Я не сторонник хранения вещей в сессии. Обычно есть другой способ сохранить эти данные.
[править] Для чего я использую сессию:
Единственное, что я часто делаю, - это хранение облегченной версии критических данных пользователей в сеансе на основе сервера сеансов. Тем не менее, мы делаем его прозрачно загруженным и стараемся не дублировать то, что есть в билете.
Таким образом, мы не выставляем в cookie ничего деликатного и не полагаемся на сеанс. Мы также установили агрессивное восстановление сессий. В сочетании с небольшим объемом данных, хранящихся в сеансе, сеансы не доставляют нам проблем, и, поскольку только 1 фрагмент кода знает, что находится в сеансе, мы можем легко его реорганизовать.
Для чего-либо еще сессии являются злом. Я предпочитаю поддерживать viewstate на странице, которая нуждается в этом, или просто сохранять временное состояние в базе данных.