「ASP.NET CoreのセッションをRedisに保存する」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
1行目: | 1行目: | ||
[[ASP .NET Core]]の[[セッション]]を[[Redis]]に保存したい。 | [[ASP .NET Core]]の[[セッション]]を[[Redis]]に保存したい。 | ||
− | |||
− | |||
− | |||
− | |||
− | + | == 実装 == | |
− | + | === 前提 === | |
− | * | + | * ASP.NET Core 8.0.1 |
− | |||
− | ; | + | === nuget === |
+ | * Microsoft.Extensions.Caching.StackExchangeRedis | ||
+ | |||
+ | === appsettings.json === | ||
+ | ConnectionStringsにredisの設定を書く。 | ||
+ | <source lang="json"> | ||
+ | { | ||
+ | "ConnectionStrings": { | ||
+ | "redis": "localhost:6379" | ||
+ | }, | ||
+ | "Logging": { | ||
+ | "LogLevel": { | ||
+ | "Default": "Information", | ||
+ | "Microsoft.AspNetCore": "Warning" | ||
+ | } | ||
+ | }, | ||
+ | "AllowedHosts": "*" | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | === service === | ||
+ | |||
+ | appsettings.jsonを読み込みredisサービスを追加する。 | ||
+ | <source lang="csharp"> | ||
+ | // Redisの設定 | ||
+ | builder.Services.AddStackExchangeRedisCache(options => | ||
+ | { | ||
+ | options.Configuration = builder.Configuration.GetConnectionString("redis"); | ||
+ | options.InstanceName = ""; | ||
+ | }); | ||
+ | </source> | ||
+ | |||
+ | セッションの設定をする。 | ||
+ | <source lang="csharp"> | ||
+ | // セッションの設定 | ||
+ | builder.Services..AddSession(options => | ||
+ | { | ||
+ | options.IdleTimeout = TimeSpan.FromMinutes(60); // セッションのタイムアウト時間 | ||
+ | options.Cookie.Name = "session"; // セッション用のクッキー名 | ||
+ | options.Cookie.IsEssential = true; | ||
+ | }); | ||
+ | </source> | ||
+ | |||
+ | セッションを有効化する。 | ||
<source lang="csharp"> | <source lang="csharp"> | ||
− | + | app.UseSession(); | |
− | + | </source> | |
− | |||
− | + | === セッションの暗号化 === | |
− | + | asp.net coreではセッションデータが暗号化されます。 | |
− | + | その関係で初期状態のままでは複数のサーバー(異なるアプリ)でデータ共有することができません。 | |
− | |||
− | |||
− | |||
− | + | 暗号化の設定は2パターンあります。 | |
− | + | * アプリ名を統一する | |
− | + | * 共通のキーを使う | |
− | |||
− | |||
− | + | なお、無効化はできないっぽいです。 | |
− | |||
− | + | 複数のウェブサーバーのセッションを共有するだけならアプリ名の統一が簡単です。 | |
− | + | <source lang="csharp"> | |
− | + | using Microsoft.AspNetCore.DataProtection; | |
− | + | // 中略 | |
+ | builder.Services.AddDataProtection().SetApplicationName("appName"); | ||
</source> | </source> | ||
+ | |||
おわり。 | おわり。 |
2024年3月7日 (木) 04:01時点における版
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
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ではセッションデータが暗号化されます。 その関係で初期状態のままでは複数のサーバー(異なるアプリ)でデータ共有することができません。
暗号化の設定は2パターンあります。
- アプリ名を統一する
- 共通のキーを使う
なお、無効化はできないっぽいです。
複数のウェブサーバーのセッションを共有するだけならアプリ名の統一が簡単です。
using Microsoft.AspNetCore.DataProtection;
// 中略
builder.Services.AddDataProtection().SetApplicationName("appName");
おわり。