「ASP.NET CoreのセッションをRedisに保存する」の版間の差分
imported>Administrator 編集の要約なし |
Administrator (トーク | 投稿記録) 編集の要約なし |
||
| (2人の利用者による、間の8版が非表示) | |||
| 1行目: | 1行目: | ||
[[ASP .NET Core]]の[[セッション]]を[[Redis]]に保存したい。 | [[ASP .NET Core]]の[[セッション]]を[[Redis]]に保存したい。 | ||
== 前提 == | |||
* | * ASP.NET Core 8.0.1 | ||
; | == nuget == | ||
[[Redis]]の[[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とapp == | |||
appsettings.jsonを読み込みredisサービスを追加する。 | |||
<source lang="csharp"> | |||
// Redisの設定 | |||
builder.Services.AddStackExchangeRedisCache(options => | |||
{ | |||
options.Configuration = builder.Configuration.GetConnectionString("redis"); | |||
options.InstanceName = ""; | |||
}); | |||
</source> | |||
セッションの設定をする。 | |||
<source lang="csharp"> | <source lang="csharp"> | ||
// セッションの設定 | |||
builder.Services.AddSession(options => | |||
{ | |||
options.IdleTimeout = TimeSpan.FromMinutes(60); // セッションのタイムアウト時間 | |||
options.Cookie.Name = "session"; // セッション用のクッキー名 | |||
//options.Cookie.IsEssential = true; | |||
}); | |||
</source> | |||
セッションを有効化する。 | |||
<source lang="csharp"> | |||
app.UseSession(); | |||
</source> | |||
=== セッションの暗号化 === | |||
asp.net coreではセッションデータ(や一時データなどはすべて)は問答無用で暗号化されます。デバッグ時であろうと無効化はできないっぽいです。その関係で初期状態のままでは複数のサーバー(異なるアプリ)でデータ共有することができません。このままではバックエンドに[[redis]]を使っている意味ないです。はい。 | |||
暗号化の設定は2パターンあるようです。 | |||
* アプリ名を統一する | |||
* 共通のキーを使う | |||
複数のウェブサーバーのセッションを共有するだけならアプリ名の統一が簡単です。 | |||
<source lang="csharp"> | |||
using Microsoft.AspNetCore.DataProtection; | |||
// 中略 | |||
builder.Services.AddDataProtection().SetApplicationName("appName"); | |||
</source> | </source> | ||
おわり。 | おわり。 | ||