2013-03-01 2 views
1

Мы используем пользовательский номер RoleProvider, чтобы получить наши роли для нашего приложения ASP.NET. Он правильно выполняет роли, но если мы включим опцию cacheRolesInCookie в нашем файле web.config. Файл cookie не устанавливается после обновления до .NET 4.5. Он по-прежнему работает на нашем сайте в .NET 4.0, но всякий раз, когда мы устанавливаем фреймворк 4.5 (даже если мы все еще нацелены на 4.0 на нашем сайте), cookie не устанавливается.Роль провайдера cookie не устанавливается должным образом

Это то, что мы ожидаем (то, что мы получаем на нашем сайте, когда в 4.0):

Set-Cookie: .CUSTOMROLES=<LOTS OF DATA>; path=/; HttpOnly 

И это то, что я получаю после того как я модернизировал свой локальный ящик Дев до 4,5 (после установки VS2012)

Set-Cookie: .CUSTOMROLES=; expires=Tue, 12-Oct-1999 04:00:00 GMT; path=/; HttpOnly 

Это параметр в web.config

<roleManager defaultProvider="CustomRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName=".DELTAROLES" cookieTimeout="75" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All" > 

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

И, наконец, функция GetRolesForUser() вызывается дважды, потому что она не кэшируется в cookie правильно. Оба раза он дает правильные роли. Его просто не делает его в печенье

EDIT:

Я сделал некоторые более копать, и я узнал, что, по-видимому есть максимальная длина-куки 4096 (не настраивается) и выход RolePrincipal.ToEncryptedTicket это 5698. Я не уверен, почему это отличается от того, что было в .NET 4.0, но это другое. Итак, я, по крайней мере, узнал, почему cookie не установлен, хотя я не могу себе представить, почему он пытается быть таким большим, как наш RoleProvider дает только максимум 2 роли, поэтому я не знаю, что еще он пытается сохранить.

+0

Возможный дубликат [Длина файла cookie для кэширования RolePrincipal всегда больше 4096] (http://stackoverflow.com/questions/12078210/length-of-the-cookie-text-for-caching-roleprincipal- is-always-more-than-4096) –

ответ

-1

Итак, я смотрел на это больше, и, по-видимому, это просто ошибка в .NET 4.5, делающая его больше, чем ожидалось. Корпорация Майкрософт выпустила исправление, которое можно найти здесь: http://support.microsoft.com/kb/2750147

+0

Исправление больше не доступно. Я просто обновил myy-проект от .net 4 до 4.5 и имел ту же проблему. Есть идеи? Все еще есть файл? благодаря –

0

Я столкнулся с такой же проблемой после обновления до .NET 4.5. Я проверил длину файла cookie, и это не выше 4096, так что это не причина. Мог бы понять, почему он не сохраняет cookie, но вы можете сохранить его самостоятельно. См. Пример кода на this answer.

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