しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET で自動的に発行されるクッキーの名前を変更する方法

今日はちょっとした 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 は割とイケていない命名が多い気がしています。でも、基本的に変更可能なのが救いですね。