「ASP.NET CoreのセッションをRedisに保存する」の版間の差分
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) 編集の要約なし |
||
| (同じ利用者による、間の3版が非表示) | |||
| 2行目: | 2行目: | ||
== 前提 == | |||
* ASP.NET Core 8.0.1 | * ASP.NET Core 8.0.1 | ||
== nuget == | |||
[[Redis]]の[[NuGet]]を入れる。 | |||
* Microsoft.Extensions.Caching.StackExchangeRedis | * Microsoft.Extensions.Caching.StackExchangeRedis | ||
== appsettings.json == | |||
ConnectionStringsにredisの設定を書く。 | ConnectionStringsにredisの設定を書く。 | ||
<source lang="json"> | <source lang="json"> | ||
| 26行目: | 26行目: | ||
</source> | </source> | ||
=== | == serviceとapp == | ||
appsettings.jsonを読み込みredisサービスを追加する。 | appsettings.jsonを読み込みredisサービスを追加する。 | ||
<source lang="csharp"> | <source lang="csharp"> | ||
| 45行目: | 44行目: | ||
options.IdleTimeout = TimeSpan.FromMinutes(60); // セッションのタイムアウト時間 | options.IdleTimeout = TimeSpan.FromMinutes(60); // セッションのタイムアウト時間 | ||
options.Cookie.Name = "session"; // セッション用のクッキー名 | options.Cookie.Name = "session"; // セッション用のクッキー名 | ||
options.Cookie.IsEssential = true; | //options.Cookie.IsEssential = true; | ||
}); | }); | ||
</source> | </source> | ||
| 55行目: | 54行目: | ||
=== セッションの暗号化 === | === セッションの暗号化 === | ||
asp.net | asp.net coreではセッションデータ(や一時データなどはすべて)は問答無用で暗号化されます。デバッグ時であろうと無効化はできないっぽいです。その関係で初期状態のままでは複数のサーバー(異なるアプリ)でデータ共有することができません。このままではバックエンドに[[redis]]を使っている意味ないです。はい。 | ||
暗号化の設定は2パターンあるようです。 | |||
* アプリ名を統一する | * アプリ名を統一する | ||
* 共通のキーを使う | * 共通のキーを使う | ||
複数のウェブサーバーのセッションを共有するだけならアプリ名の統一が簡単です。 | 複数のウェブサーバーのセッションを共有するだけならアプリ名の統一が簡単です。 | ||
2024年3月7日 (木) 04:36時点における最新版
ASP .NET CoreのセッションをRedisに保存したい。
前提[編集 | ソースを編集]
- ASP.NET Core 8.0.1
nuget[編集 | ソースを編集]
- 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");
おわり。