カスタムを使用してRoleProvider
、ASP.NET アプリケーションのロールを取得します。cacheRolesInCookie
ロールを適切に取得していますが、web.config ファイルでオプションを有効にすると. .NET 4.5 にアップグレードした後、Cookie は設定されません。.NET 4.0 のサイトでは引き続き機能しますが、4.5 フレームワークをインストールするたびに (サイトでまだ 4.0 をターゲットにしている場合でも)、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" >
また、2 つの異なる RoleProvider があり、Cookie の名前に関係なく、両方で問題が発生し、他の Cookie オプションに異なる値を試しました。
最後に、Cookie に適切にキャッシュされていないため、GetRolesForUser() 関数が 2 回呼び出されています。どちらの場合も正しい役割を与えます。クッキーに到達していないだけです
編集:
さらに掘り下げたところ、どうやら最大のCookieの長さが4096(構成不可)であり、の出力RolePrincipal.ToEncryptedTicket
が5698であることがわかりました。これが.NET 4.0と異なる理由はわかりませんが、違う。したがって、少なくとも、Cookie が設定されていない理由はわかりましたが、RoleProvider が最大 2 つのロールしか与えないため、なぜそれほど大きくしようとしているのか想像できないため、他に何があるかわかりません。保存しようとしています。