「ASP.NET CoreのセッションをRedisに保存する」を編集中

ナビゲーションに移動 検索に移動

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

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

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)