しばやん雑記

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

ASP.NET でのセッション周りの設定を弄る

今まではあまり ASP.NET のセッションを使わなかったのですが、最近必要になったのでカスタマイズの方法をいろいろと調べました。想像以上に拡張性が高くておすすめです。

セッションクッキーの名前を変える

ASP.NET のセッションで使われるクッキーの名前は、デフォルトでは "ASP.NET_SessionId" となっていますが、この名前は Web.config を少し修正するだけで簡単に変更が可能です。

<sessionState mode="InProc" cookieName="sessionid"></sessionState>

これで "sessionid" という名前のクッキーが発行されます。

セッション ID の値を制御する

そしてセッションのために発行されるクッキーの値は、デフォルトではランダムな英数字になっていますが、こっちも簡単に値を制御することが可能です。

ASP.NET には ISessionIDManager というインターフェースが用意されていて、このインターフェースを実装することで自由に制御可能ですが、デフォルトの実装である SessionIDManager の CreateSessionID メソッドと Validate メソッドをオーバーライドする方が簡単です。

public class GuidSessionIDManager : SessionIDManager
{
    public override string CreateSessionID(HttpContext context)
    {
        return Guid.NewGuid().ToString();
    }

    public override bool Validate(string id)
    {
        Guid result;

        return Guid.TryParse(id, out result);
    }
}

この例では GUID をクッキーの値として使うことにします。そして Web.config で作成した GuidSessionIDManager を使うように設定するだけで完了です。

<sessionState mode="InProc" sessionIDManagerType="WebApplication1.GuidSessionIDManager"></sessionState>

これでセッション ID が GUID になります。

独自のセッション保存方法を使う

ASP.NET では InProc / SQLServer / StateServer など幾つかのセッションステートプロバイダを持っていますが、アプリケーションの要件によってはどれも採用できない場合もあると思います。

そんな時には SessionStateStoreProviderBase クラスを実装した、独自のセッションステートプロバイダを用意することで対応することが可能です。

SessionStateStoreProviderBase クラス (System.Web.SessionState)

ぶっちゃけてしまうと、実装が超絶めんどくさいのでコードは載せませんが MSDN にはサンプル実装があるので、比較的簡単に実装できるかと思います。実装したら Web.config に以下のように追加するだけで使えるようになります。

<sessionState mode="Custom" customProvider="MySessionStateProvider">
  <providers>
    <add name="MySessionStateProvider" type="WebApplication1.MySessionStateProvider"/>
  </providers>
</sessionState>

customProvider に指定するのは providers 要素に追加した時の名前なので注意してください。