メインメニューを開く

差分

ASP.NET CoreのセッションをRedisに保存する

573 バイト追加, 2024年3月7日 (木)
編集の要約なし
[[ASP .NET Core]]の[[セッション]]を[[Redis]]に保存したい。
; 前提
* ASP .NET Core 1.1を使用
* Redisサーバーは立ち上がっていること
*: この例では[[QNAP]]上の[[Docker]]で[[Redis]]を立ち上げているのでポート番号が一般的ではない点に注意
; 使用するNuGetパッケージ== 実装 ==* Microsoft.Extensions.Caching.Redis=== 前提 ===* Microsoft.AspNetCore.SessionどちらのパッケージもASP ASP.NET Core 28.0版が最新なので、[[NuGet]]から入れるときにバージョン指定で10.x系を入れている。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 = "";}); Startup</source> セッションの設定をする。<source lang="csharp">// セッションの設定builder.Services..csでサービス追加をして使用宣言をする。AddSession(options =>{ options.IdleTimeout = TimeSpan.FromMinutes(60); // セッションのタイムアウト時間 options.Cookie.Name = "session"; // セッション用のクッキー名 options.Cookie.IsEssential = true;});</source> セッションを有効化する。
<source lang="csharp">
public void ConfigureServicesapp.UseSession(IServiceCollection services); { /</ Add framework services.source>
// Redis Session services.AddDistributedRedisCache(options => { options.Configuration = "192.168.10.20:32776";= セッションの暗号化 === optionsasp.InstanceName = "";net coreではセッションデータが暗号化されます。 });その関係で初期状態のままでは複数のサーバー(異なるアプリ)でデータ共有することができません。
services.AddSession(options =>暗号化の設定は2パターンあります。 {* アプリ名を統一する options.CookieName = "session"; options.IdleTimeout = TimeSpan.FromMinutes(60); });* 共通のキーを使う
services.AddMvc(); }なお、無効化はできないっぽいです。
public void Configure複数のウェブサーバーのセッションを共有するだけならアプリ名の統一が簡単です。<source lang="csharp">using Microsoft.AspNetCore.DataProtection;// 中略builder.Services.AddDataProtection(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { app.UseSessionSetApplicationName("appName"); }
</source>
 
おわり。