0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ASP.NETのセッション管理をRedis(Azure)で行う

Last updated at Posted at 2024-04-25

必要に迫られてAPS.NETのセッション管理をRedis(Azure Cache for Redis)を使う手順を検証してみました。

環境

  • VisualStudio Community 2022
  • .NET Framework 4.7.2

WebForm1.aspx

プログラムとしては、サンプル的にFormにUserNameとEmailをSessionに入れるだけのものを作ってみました。確認のためページロード時にLabelへ代入して現在の値を表示しています。UI側は省略します。

WebForm1.aspx.vb
Imports System.Reflection.Emit
Public Class WebForm1
    Inherits Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        If Not Session("UserName") Is Nothing Then
            lbUserName.Text = Session("UserName")
        End If
        If Not Session("Email") Is Nothing Then
            lbPassword.Text = Session("Email")
        End If
    End Sub

    Protected Sub Button1_Click(sender As Object, e As EventArgs)
        Session("UserName") = tbUserName.Text
        Session("Email") = tbEmail.Text
        Response.Redirect("WebForm1.aspx")
    End Sub

    Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Session.Abandon()
        Response.Redirect("WebForm1.aspx")
    End Sub
End Class

普通に動きます。特に何も設定していないのでSessionはInProc(ローカルに格納されている)状態になっているかと思います。これだと複数サーバーで動かした時にセッションが共有されないので、Redisを使えうように変更します。

Azure側

  • Azure Cache for Redisのインスタンスを作成
    • テスト目的なのでBasic C0で作成
      • 実際のところセッションキャッシュ利用でどのレベルが必要かは不明
      • 個人的にはキャッシュであればBASIC C1(1GB 1000接続)くらいで十分かと
    • 設定で特に迷いそうな部分無し
    • アクセス可能になるまで10-20分かかる(長い
    • 情報ソースは古いがそのまま動く

プログラム側

  • プロジェクトを右クリックして「NuGetパッケージの管理」からMicrosoft.Web.RedisSessionStateProviderを追加

スクリーンショット 2024-04-25 16.17.05.png
※ex版もあるが違いは不明

  • web.configに以下のsessionState情報を追加
    • hostは設定したもの、accessKeyは管理画面から取得できます

※下記のテンプレートは自動追加されませんでした

<configuration>
  <system.web>
    ....
    <sessionState mode="Custom" customProvider="MySessionStateStore">
        <providers>
            <add name="MySessionStateStore"
				type="Microsoft.Web.Redis.RedisSessionStateProvider"
				host="xxxxx.redis.cache.windows.net"
				port="6380"
				accessKey="xxxxxx"
				ssl="true" />
        </providers>
    </sessionState>
  </system.web>
...
<configuration>

これで同じように動作するのを確認します。普通に動けば設定はOKなはずです。動作していない場合や設定が誤っている場合は、タイムアウトしてエラーページが表示されます。

ぶつぶつ

プログラム自体は変更することなく、Nugetでセッションプロバイダーの追加をして設定を書くだけで、Redis側に移りました。Redis側の設定も必要無く簡単でした。

気になる点

  • Redisのコネクション数は同時? Session管理だけの時は少なくて良い?
  • 保存された値によるとTimeOutは20分(1200sec)

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?