今日はちょっとした ASP.NET のクッキーに関する小ネタです。
ASP.NET は特別な設定などをしなくても自動的にクッキーを発行して、認証状態やセッション、そして CSRF 対策を行ってくれます。これは非常に便利なんですが、その時に発行されるクッキーの名前が割とイケてないので、変更する方法をまとめておきます。
フォーム認証クッキー
FormsAuthentication.SetAuthCookie を呼び出した時に発行されるクッキーです。
デフォルトの名前は ".ASPXAUTH" なので、結構見たことある人は多いと思います。設定は Web.config の forms 要素にある name 属性を指定して行います。
<system.web> <authentication mode="Forms"> <forms name="auth" timeout="2880" /> </authentication> </system.web>
この例ではフォーム認証クッキーの名前を "auth" に変更します。
セッションクッキー
セッションに値を保存したときに自動的に発行されるクッキーです。
デフォルトの名前は "ASP.NET_SessionId" となっていますが、そこまで ASP.NET であることを主張しなくてもいいと思います。これも Web.config の sessionState 要素の cookieName 属性で設定します。
<system.web> <sessionState mode="InProc" cookieName="session"></sessionState> </system.web>
シンプルに "session" と変更している例になります。
CSRF トークンクッキー
ASP.NET MVC や Web Pages で CSRF 対策を行った時に出力されるクッキーです。具体的にいうと System.Web.Helpers 名前空間に含まれている AntiForgery クラスが出力します。
こいつはデフォルトの名前が "__RequestVerificationToken" と意味が分からないほど長いので、個人的には以下のように短くして使うことが多いです。
protected void Application_Start() { // __RequestVerificationToken から token へ変更する AntiForgeryConfig.CookieName = "token"; }
これで "token" というシンプルな名前でクッキーが発行されます。
歴史的な経緯だと思うのですが、ASP.NET は割とイケていない命名が多い気がしています。でも、基本的に変更可能なのが救いですね。