メインメニューを開く

ASP .NET CoreセッションRedisに保存したい。


目次

前提編集

  • ASP.NET Core 8.0.1

nuget編集

RedisNuGetを入れる。

  • Microsoft.Extensions.Caching.StackExchangeRedis

appsettings.json編集

ConnectionStringsにredisの設定を書く。

{
    "ConnectionStrings": {
        "redis": "localhost:6379"
    },
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
        }
    },
    "AllowedHosts": "*"
}

serviceとapp編集

appsettings.jsonを読み込みredisサービスを追加する。

// Redisの設定
builder.Services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = builder.Configuration.GetConnectionString("redis");
    options.InstanceName = "";
});

セッションの設定をする。

// セッションの設定
builder.Services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromMinutes(60); // セッションのタイムアウト時間
    options.Cookie.Name = "session"; // セッション用のクッキー名
    //options.Cookie.IsEssential = true;
});

セッションを有効化する。

app.UseSession();

セッションの暗号化編集

asp.net coreではセッションデータ(や一時データなどはすべて)は問答無用で暗号化されます。デバッグ時であろうと無効化はできないっぽいです。その関係で初期状態のままでは複数のサーバー(異なるアプリ)でデータ共有することができません。このままではバックエンドにredisを使っている意味ないです。はい。

暗号化の設定は2パターンあるようです。

  • アプリ名を統一する
  • 共通のキーを使う

複数のウェブサーバーのセッションを共有するだけならアプリ名の統一が簡単です。

using Microsoft.AspNetCore.DataProtection;
// 中略
builder.Services.AddDataProtection().SetApplicationName("appName");


おわり。

関連項目編集