ホームページ  >  記事  >  バックエンド開発  >  セッション配信の詳細説明

セッション配信の詳細説明

大家讲道理
大家讲道理オリジナル
2017-05-31 14:34:232723ブラウズ

1. まえがきとレビュー


前回の記事Session分散共有 = Session + Redis + Nginxでは、多くの学生がメッセージを残して私にたくさんの質問をしてくれました。その中には次のようなものがあります。nginx がハングした場合はどうすればよいですか? Microsoft セッション ソリューションと比較して、Redis セッション ソリューションを使用する利点は何ですか? Cookie はセッションの代わりにもなります。Redis のセッション ソリューションを使用する利点は何ですか? Nginxのiphashメソッドとは何ですか? MachineKeyの用途は何ですか?ネットコアを実装するにはどうすればよいですか?

皆さんの質問を見たとき、私の答えは応用レベルのみでした。「他の人がこの問題を解決しました。私もこの方法で解決しました。リンクを参照してください。」 「恥ずかしながら、当時、私は彼の本当の利点が何であるかを完全に理解していませんでした。私は直感と経験に基づいて、そうする方が良いことを知っていました。何かが制御できないときはそれがわかっていました。」分離、視覚化、クラスタリングによりシステムをより堅牢にすることができますが、理論的なサポートはありません。最近情報を調べたり本を読んだりした結果、この記事ではこのセッション共有を Web サイト アーキテクチャ のユーザビリティの観点から分析して説明し、.net core を使用してこのアーキテクチャ パターンを再度実装します。 (セッション分散共有のネットコア版は、過去の経験はおろか、本番環境に適用する機会もないため、あくまで研究用です。注意してください。ただし、すでに関連記事を書いている専門家が庭にいます。この記事 関連する記事は最後に掲載します)

2. ウェブサイトの可用性 - セッション管理


ユーザビリティはウェブサイトのアーキテクチャの非常に重要な部分です。ユーザーがいつでもどこでもこのウェブサイトを開くと、ウェブサイトが開き、内部の機能が使用できるようになります。可用性が低い場合はどうなりますか?春節中に 12306 でチケットを入手するシーンを誰もが想像します。Web サイトがさまざまな方法でクラッシュします。チケットを購入する他の方法があるなら、この壊れた Web サイトは使用しないでしょう。ビジネス シナリオが非常に極端であるため、この例は少し極端です。 もちろん、この現象は Web サイトのユーザビリティの問題だけではありません。しかし、Web サイトが 3 日ごとに開かなくなったり、クリックしたすべてのページがエラー ページでいっぱいになり、操作に応答しなくなったりします。この Web サイトを引き続き使用しますか?私たちは、Web サイトを閲覧するとき、12306 のような独占 Web サイトのように利用できない限り、必ずそのサイトから離れて、他の同様の Web サイトを探すと思います。

セッション管理は、Web サイトの使いやすさのコンテンツの 1 つです。HTTP はステートレス リクエストであること、つまり、最後の Http リクエストの関連情報を追跡することは不可能であることは誰もが知っています。ビジネスでは Http をステートフル リクエストに変換する必要があるため、Session が誕生しましたが、分散 Web サイトの設計では、ステートレス リクエストは Web サイトの水平拡張 (アプリケーション サーバーの追加または削除) を実現できるため、Session 情報が存在しないため、Session と競合します。は Web サイトのアプリケーション サーバーに保存されます キャッシュでは、サーバーを追加すると使用できなくなるため、セッションを分離することがこの問題を解決する鍵となります。 以下では、Web サイトの一般的なセッション管理方法を紹介します。

1. セッション レプリケーション

セッション レプリケーション機能は、エンタープライズ アプリケーション システムで一般的に使用される初期のサービス クラスター セッション管理メカニズムです。セッション間でセッションオブジェクトを同期する JBossにはこの機能があるようですが、.Netではまだ知りません。

利点: セッション情報はすぐに読み取られ、実装が簡単です。

短所: クラスターの規模が大きい場合、サーバー間のセッションのレプリケーションがサーバー リソースとネットワーク リソースを占有し、最終的にはシステムが過負荷になります。

2. セッション バインディング

セッション バインディング メソッド。通常、ソフト/ハード バランシング負荷サーバーがこの機能を提供します。たとえば、前の記事の Nginx の IPhash メソッド、バランシング ロード サーバーはハッシュを使用します。同じ IP が同じサーバーに割り当てられます。つまり、セッションが特定のサーバーにバインドされ、セッションを常にこのサーバーで取得できるようにします。これは、セッション固定性とも呼ばれます。

短所: サーバーがダウンすると、このサーバー上のセッションは存在しなくなり、ユーザーが他のサーバーに切り替えるリクエストを行うと、セッションが存在しないためエラーが発生します。

セッション配信の詳細説明

3. Cookie を使用してセッションを記録する

Cookie を介してセッション情報を記録するこの方法は、Cookie が使用されていない限り、ほとんどの Web サイトで使用されている非常に優れた、成熟した方法です。悪用された計画。 Cookie 記録セッションは、クライアントに何らかのステータス情報を保存するためのもので、リクエストごとにそれをサーバーに送信する必要があります。

アドバンテージ:この方法は簡単で実装しやすく、高可用性が高く、水平サーバーの拡張をサポートし、成熟したソリューションを備えています。サイズ制限があり、リクエストごとに Cookie を送信するとパフォーマンスに影響します

セッション配信の詳細説明. セッションサーバー

セッション配信の詳細説明 セッションはビジネス用であるため、セッションサーバーを介してセッションを管理することは非常に良いソリューションですHTTP ステートの生成が必要であり、分散 Web サイトの設計では Http ステートレスが推奨されます。この設計を満たすために、セッション サーバーはステートフルなセッション情報をステートレス アプリケーション サーバーから分離し、さまざまなサーバーのさまざまな特性に従って設計します。たとえば、セッション情報を Redis に保存する場合、Redis のクラスター構成と安定性の設定には多くの優れたソリューションがあります。セッションが Mem

cache

に保存されている場合、Memcache のクラスター構成と安定性の設定も同様に行われます。成熟したケースがたくさんあるでしょう。このようにして、いくつかの問題を単純化します。.Net セッションのみを使用する場合は、.Net の奥深いものを理解し、使いやすさと安定性を確保するために変換する必要があります。内容が深いほど、より多くの時間と経験が必要になります。セッション ストレージ メディアを Redis に転送する場合、Redis クラスター ソリューションと管理ツールは非常に完成度が高く、セッションの問題を解決するだけで済みます。

利点:

高可用性、高セキュリティ、良好な拡張性、高性能、無制限の情報サイズ

3. .Net Core+Redis+Nginx はセッション分散スタイル共有を実装します

セッション配信の詳細説明1.事前準備と環境

(1)Vs2017 (2).Net Core 1.1 (3) Win 7 (セッション配信の詳細説明)ubuntu 16.0セッション配信の詳細説明


2、 .ネットコアはじめに

インターネットの発展に伴い、今日の中国市場(外国については分かりません)では、オープンソースとクロスプラットフォームが言語とテクノロジーの品質を測る重要な指標の1つとなっています。 Net オープンソースとクロスプラットフォームを推進するために、.Net Core が誕生しました。

詳細については、Daniel の記事を参照してください: .NET Core、.NET Framework、Mono の関係 .Net Core は以前の

C#

構文

を覆していません。以前は中国語 (C#) を話すのが一般的でしたが、今も中国語ですが、話す環境は変わりました。 2) .NET CORE は、まだ始まったばかりなので、

api が変わった、またはよく言われるように、話す環境の環境が変わって、見慣れないものがたくさんあります。 、当局はこれらの新しいことを説明するために関連する単語を探しているため、それを説明するためにどのような公式の言葉を使用する必要があるかわかりません。 I 3) IIS から分離することで、クロスプラットフォーム

よく言われているのは、新しい環境で私たちが飢えないようにするために、Microsoft の母親は飢えているということです。私はどうやって生き残ればよいのかわかりません。現在の環境 (Windows+IIS) を終了した後。それで、彼は私たちに言語 (C#) を教え、お金を稼ぐためのツール (.Net Core+Kestrel) を与え、そしてこう言いました、「さあ、坊や、自分で仕事をしなさい、ちょっと待って、忘れないでね」 セッション配信の詳細説明) NuGet はますます重要になってきています

数年間の開発を経て、NuGet はますます成熟してきました。 .Net Core はオープンソースです。コンポーネントの取得の主な方法は NuGet を介して行われます。これにより、さまざまな

ミドルウェア やコンポーネントをダウンロードでき、便利で高速です (ネットワークが切断される場合を除きますが、国内のミラーは使用できます) )、NuGet は Microsoft の母親から与えられたアドレス帳のようなものです。いくつかの点でサポートが必要な場合は、NuGet を通じて 7 人の叔母と 8 人の叔母が助けを求めてくれます。

3. トポロジ図

前回の記事での成功体験に基づいて、.Net Core プログラムをホストする Windows システムと Ubuntu システムに単純に変換しました。 IIS ではなく Windows はどれですか? 私が言いたいのは、.Net Core はグローバル化の原則を実装しており、IIS に .Net Core プログラムを展開したい場合は、同じものをインストールする必要があるということです。アプリケーションを作成し、サイト上でアプリケーションを構成する場合も、プールは「アンマネージ コード」になる必要があります。

セッション配信の詳細説明. セッションを使用して .Net Core プログラムを開発します

セッション配信の詳細説明-1. Web プログラムを作成します

このアプリケーションには .Net Core Web アプリケーションが含まれていません認証情報建

セッション配信の詳細説明

セッション配信の詳細説明-2、.

net core作成後、call session

ネットコアセッションを使用するには、 Session に関連する NuGet パッケージを参照する必要があります。オンラインで確認したところ、.Net Core の公式 Session コンポーネントはミドルウェアに似ており、Redis を正式にサポートしていることがわかりました。 セッション配信の詳細説明

セッション配信の詳細説明

注: セッション配信の詳細説明

.Net Core の

Mvc は、プログラム内で HttpContext.Session を記述すると、次のエラーが表示されます。セッションはまだ行われていませんこのアプリケーションまたはリクエスト用に設定されました。

セッション配信の詳細説明

セッション配信の詳細説明-2-1、Microsoft.AspNetCore.Session

.Net Core はセッション Microsoft.AspNetCore.Session を使用するためにインストールされている必要があります。彼の NuGet パッケージは次のようにインストールします。 画像:

セッション配信の詳細説明

セッション配信の詳細説明-2-2、Startup.cs を変更してセッションを利用できるようにします

対応する位置に強調表示されたコードを追加します。 AddSession(); app.UseSession();

<br>

public void ConfigureServices(IServiceCollection services)
 {     // Add framework services.     services.AddMvc();     services.AddSession();
 }
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
     loggerFactory.AddConsole(Configuration.GetSection("Logging"));
     loggerFactory.AddDebug();     if (env.IsDevelopment())
     {
          app.UseDeveloperExceptionPage();
          app.UseBrowserLink();
     }     else
     {
          app.UseExceptionHandler("/Home/Error");
     }

     app.UseStaticFiles();     app.UseSession();
     app.UseMvc(routes =>
     {
          routes.MapRoute(
          name: "default",
          template: "{controller=Home}/{action=Index}/{id?}");
     });
}

セッション配信の詳細説明-2-3、セッションの書き込みと読み取り

セッション読み取りメソッドは、 .Netと同じで書き方が異なり、書き方は以下の通りで、SessionのHttpContext.Session.SetStringまたはHttpContext.Session.SetメソッドはそれぞれstringとBytearrayをサポートしているため、複雑なエンティティはセッション内の Json ストアに変換されます。 【セッション書き込み方法】

HttpContext.Session.SetString("key", "strValue");

<br>【セッション読み込み方法】

HttpContext.Session.GetString("key")

<br> セッション配信の詳細説明. セッション保存メディアの交換 Redisの場合

セッション配信の詳細説明 -1. まず Redis を設定します

詳細な設定方法については、以下を参照してください:

セッション分散共有 = セッション + Redis + Nginx

redis-server redis.windows.conf

<br>

詳細な設定方法については、以下を参照してください:

セッションディストリビューション共有 = セッション + Redis + Nginx

セッション配信の詳細説明-2. Microsoft.Extensions.Caching.Redis.Core をインストールします

NuGet で Microsoft.Extensions.Caching.Redis.Core を検索してインストールします。 NuGet パッケージは Caching の拡張機能です。つまり、Caching ストレージ メディアを置き換えることができます

セッション配信の詳細説明-3。 Redis 接続文字列 (web.config で appsetting ノードを構成するのと同等)。注: 追加位置は Logging より上でなければなりません。そうしないと読み取れません。以下の強調表示された部分にコードを追加します

セッション配信の詳細説明

<span style="color: #000000">{<br><br></span><span style="background-color: #ffff00"><span style="color: #800000">  "</span><span style="color: #800000">Data</span><span style="color: #800000">"</span>: <span style="color: #800000">"RedisConnection</span><span style="color: #800000">"</span></span><span style="background-color: #ffff00">,<br><span style="color: #800000">"</span><span style="color: #800000">ConnectionStrings</span><span style="color: #800000">"</span></span><span style="background-color: #ffff00">: { <br><span style="color: #800000">    "</span><span style="color: #800000">RedisConnection</span><span style="color: #800000">"</span>: <span style="color: #800000">"</span><span style="color: #800000">192.168.8.138:6379</span><span style="color: #800000">"<br></span></span><span style="line-height: 1.セッション配信の詳細説明; background-color: #ffff00">  },</span>
"Logging": {    "IncludeScopes": false,    "LogLevel": {      "Default": "Warning"
    }
  }
}
セッション配信の詳細説明 -セッション配信の詳細説明、Startup.cs ConfigureServices メソッドへの参照を追加します

<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> ConfigureServices(IServiceCollection services)
        {            </span><span style="color: #008000">//</span><span style="color: #008000"> Add framework services.</span><span style="color: #000000">            services.AddMvc();<span style="background-color: #ffff00">            services.AddDistributedRedisCache(option </span></span><span style="line-height: 1.セッション配信の詳細説明; background-color: #ffff00">=><br></span><span style="line-height: 1.セッション配信の詳細説明; background-color: #ffff00">            {       </span>

                   //redis 数据库连接字符串<br>                   option.Configuration = Configuration.GetConnectionString("RedisConnection");<br>                   //redis 实例名<br>                   option.InstanceName = "master";<br>              });<br>              services.AddSession();<br>

<br>

          }

         页面运行HttpContext.Session.GetString("key"),然后用Redis管理工具RedisDesktopManager查询Session是否入库。

セッション配信の詳細説明

セッション配信の詳細説明-セッション配信の詳細説明、发布前指定IP和端口(重要) 

         如果你没有看这个步骤,继续下面发布步骤,等你发布时候,你会发现一个尴尬的问题,就是你用IP访问不了你的网站,用localhost可以访问,.Net Core默认是セッション配信の詳細説明000端口,端口占用也会让你的网站访问不了。

         只需要在Program.cs中添加高亮代码即可,细心地人已经看到.UseUrls(new string[] { }) 传入的是个数组,那么这里定义多个网站,当你执行时候dotnet命令时候,多个网站都会启动。

セッション配信の詳細説明

<br>

public static void Main(string[] args)
        {            var host = new WebHostBuilder()

                  //增加处,*号表示ip <br>                  .UseUrls(new string[] { "http://*:7201})

                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<startup>()
                .UseApplicationInsights()
                .Build();

            host.Run();
        }</startup>

6、.Net Core 发布

6-1、Windows安装.Net Core发布环境[10.2.107.100]

1) Windows Server Hosting (x6セッション配信の詳細説明 & x86)をインストールします。はIISに相当します(SDKが自動的にダウンロードされるようですが、詳細はよく調べていません)。 )。

セッション配信の詳細説明

2) dotnet コマンドを入力して確認します。「'dotnet' が内部コマンドまたは外部コマンドではない」場合は、「C:Program Filesdotnet」フォルダーで dotnet.exe を見つけて、cmd を使用してください。 dotnet.exe を呼び出して実行するか、システム環境変数を追加します (ウィンドウの cmd コマンドは、コマンドを作成するときに .exe を保存できます。つまり、コマンド dotnet は dotnet.exe です) 1] w Win7 でエラーが表示されます: 失敗しました[C: Program Filesdotnetfxr1.0.1hostfxr.dll] から DLL をロードするには、結果: 0x800700セッション配信の詳細説明7

セッション配信の詳細説明

解決策: パッチをインストールする必要があります: kb2セッション配信の詳細説明33623 ダウンロードアドレスは以下の通り:

https: // セッション配信の詳細説明Support.microsoft.com/en-us/kb/2セッション配信の詳細説明33623

【ピット2】

.net Core のバージョンに注意してください。この記事は主に .net Core 1.1.1 を使用して開発されています。次の 2 つのスクリーンショットは、間違ったバージョンを押した結果です。 -2、Ubuntuのインストール.Net Coreリリース環境[10.2.107.セッション配信の詳細説明6]

Ubuntuへの.Net Coreのインストール公式に書かれているので、Linuxシステムと競合しないようにしてください。競合する場合は、.Net Core を使用しないでください。Ubuntu と Linux の関係がわからない場合は、Baidu にアクセスしてください。

最後に、dotnet コマンドが使用できるかどうかを確認します。

6-3. ウェブサイトを公開 プロジェクトを右クリック -> 公開...

セッション配信の詳細説明<br><br>

       点击发布按钮,生成的文件如下(SessionTest为应用程序名)

セッション配信の詳細説明

        好了,有了这些文件,我们只需要把这些文件扔到服务器上就成了,但是怎么启动呢?通过查询,网上说只要用dotnet命令就成。继续实践…

        说明:我的项目叫做セッション配信の詳細説明生成了セッション配信の詳細説明这个为主要的dll,也是程序的入口。

        大家都知道.Net Core是跨平台的,不同系统的服务器环境配置好了,网上查询说是使用dotnet命令启动网站,那么可以推断出几个平台的dotnet命令是一样的。

6-3-1、Windows启动.Net Core网站[10.2.107.100:7201]

         启动.Net Core网站的命令很简单,安装好发布环境的应用程序,C:\Program Files\dotnet目录如下(如果dotnet命令不能用,可以直接调用dotnet.exe这个应用程序。)

セッション配信の詳細説明

         将生成好的网站复制到服务器上

セッション配信の詳細説明

 cmd命令找到PublishOutput

<br>

cd C:\PublishOutput

セッション配信の詳細説明

dotnet运行网站命令

dotnet SessionTest.dll

成功以后(之后再编译运行,会提示下面截图)

セッション配信の詳細説明

访问http://10.2.107.100:7201/(如果一台机子有多个网卡多个IP,其他IP的7201端口也是个独立网站)

セッション配信の詳細説明

 

6-3-2、Ubuntu启动.Net Core网站[10.2.107.セッション配信の詳細説明6:7201]

想办法将发布的程序复制到Ubuntu上面去,我测试使用的VBox虚拟机。

具体方法传送门:virtualbox中ubuntu和windows共享文件夹设置

dotnet SessionTest.dll

セッション配信の詳細説明

访问http://10.2.107.セッション配信の詳細説明6:7201/

セッション配信の詳細説明

7、Nginx配置

7-1、网站端口修改

        nginx.conf配置修改

セッション配信の詳細説明

        listen   80; 改成 listen   81; 因为一般都被80都被使用。

<br>

server {
        listen       81;
        ……
}

7-2、增加负载均衡

  nginx.conf中添加upstream节点

upstream Jq_one { <br>      server 10.2.107.100:7201; <br>       server 10.2.107.セッション配信の詳細説明6:7201;

} server {
.....
}

 

7-3、location节点修改

<br>

location / {
            root   html;
            index  index.aspx index.html index.htm;            #其中jq_one 对应着upstream设置的集群名称
            proxy_pass         http://Jq_one;             #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
            proxy_set_header   Host             $host; 
            proxy_set_header   X-Real-IP        $remote_addr; 
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}

7-セッション配信の詳細説明、Nginx启动命令

        C:\server\nginx-1.0.2>start nginx

        或

        C:\server\nginx-1.0.2>nginx.exe

7-セッション配信の詳細説明、Nginx重新载入命令

      C:\server\nginx-1.0.2>nginx.exe -s reload

 

四、黎明前的黑暗-MachineKey


 

      本以为做了上述准备和相关代码编写,就能够实现Session共享了,结果我想的太简单了,应用程序发布后并不能实现Session共享,难道分布式共享下Session需要特殊处理?.Net我是怎么实现的,它们的方法应该方法类似。我突然想到了MachineKey这个东西,之前在.Net版本分布式共享时候需要添加这个东西,评论也有人问我什么要加MachineKey。后来只能搜索.Net Core Machinekey关键词,找到了以下几篇文章做参考。

      搭建分布式 ASP.NET Core Web

      ASP.NET Core 数据保护(Data Protection)

      坎坷路:ASP.NET Core 1.0 Identity 身份验证(中集)

      net core 1.0 实现负载多服务器单点登录

      此问题属于数据安全问题,微软在开发.Net Core中延续了之前的设计,采用数据保护(Data Protection)方式对一些内部数据进行加密解密设计,如:Session、Cookie等(远不止这些)。这样可以保证数据的真实性、完整性、机密性、隔离性。数据安全必然离不开加解密算法,大家想一下之前.Net的WebFrom中的ViewState,它最终解析到Html页面是个hidden标签里面有一串很复杂的字符串,这个字符串是被数据保护(Data Protection)机制加密过的。Session也一样,大家可以看看Session存到Redis中啥样,见下图:

セッション配信の詳細説明

       数据保护(Data Protection)有个特性是隔离性,大家可以想象一下,数据保护核心是加密解密,常见的加密方式有对称加密和非对称加密,上一篇做分布式共享时候,两台机子拷贝了同样的MahcineKey,那么他的内部加密猜测好像是对称加密,MachineKey直译中文为“机器钥匙”在联想隔离性,那么可以推断出来不同机子密钥是不同的,那么MachineKey的作用是统一不同机子的密钥。(吐血中…….这个只是个猜测,详细原理请参考专业文章)

1、提取.Net Core的MachineKey

        .Net Core的MachineKey存储是以key-xxxx-xxxx-xxxx-xxxx.xml的形式存储的,那如何提取这个xml信息呢?

       Startup.cs的ConfigureServices添加下图高亮代码

<br>

public void ConfigureServices(IServiceCollection services)
        {

              //抽取key-xxxxx.xml <br>

            services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(@"D:\XML"));
            services.AddSession();
            services.AddDistributedRedisCache(option =>
            {                //redis 数据库连接字符串
                option.Configuration = Configuration.GetConnectionString("RedisConnection");                //redis 实例名
                option.InstanceName = "master";
            });
            services.AddMvc();
        }

       查看D:\Xml里的xml文件

セッション配信の詳細説明セッション配信の詳細説明

 

2、重写IXmlRepository接口固定Key

       在项目中添加CustomXmlRepository.cs类,其中keyContent中填写key.xml内容,注意:里面的几个时间(现在还不能确定expirationDate对项目是否有影响),有人问我KeyContent能否从文件里读,回答是可以,但是ubuntu的文件路径保准不是Windows的d:\之类的,需要使用Linux的写法,所以干脆字符串来的快。

<br>

using Microsoft.AspNetCore.DataProtection.Repositories;using Microsoft.AspNetCore.Http;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Threading.Tasks;using System.Xml.Linq;namespace SessionTest
{    public class CustomXmlRepository : IXmlRepository
    {        private readonly string keyContent =@"<?xml  version=&#39;1.0&#39; encoding=&#39;utf-8&#39;?>
<key>
  <creationdate>2017-0セッション配信の詳細説明-27T06:1セッション配信の詳細説明:07.219セッション配信の詳細説明692Z</creationdate>
  <activationdate>2017-0セッション配信の詳細説明-27T06:1セッション配信の詳細説明:07.18セッション配信の詳細説明セッション配信の詳細説明6セッション配信の詳細説明7Z</activationdate>
  <expirationdate>2017-07-26T06:1セッション配信の詳細説明:07.18セッション配信の詳細説明セッション配信の詳細説明6セッション配信の詳細説明7Z</expirationdate>
  <descriptor>
    <descriptor>
      <encryption></encryption>
      <validation></validation>
      <masterkey>
        <!-- Warning: the key below is in an unencrypted form. -->
      <value>HOzセッション配信の詳細説明8FE6STtDHlMo2ZONoPgPTOOjRPikRWXmHOwNDSセッション配信の詳細説明o6NPbセッション配信の詳細説明hlgl/DxXUhat66soovBUFy1APXCQセッション配信の詳細説明z30DDPyw==</value>
      </masterkey>
    </descriptor>
  </descriptor>
</key>";         
        public virtual IReadOnlyCollection<xelement> GetAllElements()
        {            return GetAllElementsCore().ToList().AsReadOnly();
        }        private IEnumerable<xelement> GetAllElementsCore()
        {            yield return XElement.Parse(keyContent);
        }        public virtual void StoreElement(XElement element, string friendlyName)
        {            if (element == null)
            {                throw new ArgumentNullException(nameof(element));
            }
            StoreElementCore(element, friendlyName);
        }        private void StoreElementCore(XElement element, string filename)
        {
        }
    }
}</xelement></xelement>

修改Startup.cs文件中的ConfigureServices方法加载自定义的CustomXmlRepository类

<br>

public void ConfigureServices(IServiceCollection services)
        {            ////抽取key-xxxxx.xml
            //services.AddDataProtection()            //        .PersistKeysToFileSystem(new DirectoryInfo(@"D:\XML"));            services.AddSingleton<ixmlrepository>();</ixmlrepository>

              services.AddDataProtection(configure =>

            {
                configure.ApplicationDiscriminator = "newP.Web";
            });

            services.AddSession();
            services.AddDistributedRedisCache(option =>
            {                //redis 数据库连接字符串
                option.Configuration = Configuration.GetConnectionString("RedisConnection");                //redis 实例名
                option.InstanceName = "master";
            });

            services.AddMvc();

        }

五、实现效果演示


         演示效果说明

         本机127.0.0.1也为10.2.107.100,因为电脑性能有限,没有弄windows虚拟机,只弄了10.2.107.セッション配信の詳細説明6这台Linux虚拟机。

         MachineKey的这个实现思路也可以用到.Net Core的身份验证上。

         UNC文件也可以实现Session共享方式

         原理就是Windows和Linux通过文件共享和挂载的方式Key.xml共享一个文件,但是总觉得有点怪怪的,共享文件会不会被别人恶意篡改,所以最后采用重写的方式实现。

         对UNC方式感兴趣的请看:搭建分布式 ASP.NET Core Web

 

 

セッション配信の詳細説明 6. 追記と反省


この記事を通じて、誰もが Web サイトの使いやすさを簡単に理解し、Redis にセッションを保存する利点を理解できることを願っています。この記事で紹介したのはウェブサイトのユーザビリティコンテンツの氷山の一角であり、私たちが学び、蓄積しなければならない知識はまだたくさんあります。

セッション分散共有の .Net Core バージョンは、.Net Core の高いパフォーマンス、クロスプラットフォーム、オープンソースにより、多くの人々の .Net Net Core に対する見方を変えました。中国市場での道のりはまだ長いと思います。.Net Core は、中国での .Net 言語の市場シェアを逆転させる特効薬ではないと思います。本当の特効薬は、私たちのように毎日プログラムを書いている .Neter かもしれません。たとえ Microsoft が .Net Core を宣伝し、成功事例があちこちに溢れていたとしても、新しい知識を学んで理解していなければ、最終的には淘汰されてしまいます。言語は単なるツールであり、継続的に学び、努力し、知識を消化し、吸収し、最終的に他の人と共有することによってのみ、私たちは最大の利益を得ることができます。そして経験してください。私はよく他の人に、仕事を始めてから最初の数年間で最も重要なのは知識ではなく、物事を行うスタイルと目標を達成するための忍耐力であると言います。「状況を変えるのは簡単ですが、難しいのです。」仕事の姿勢ややり方が悪いと、それが仕事の習慣になってしまいます。たとえ言語や仕事、さらには業界を変えたとしても、それはあなたのキャリア形成に大きな影響を及ぼします。良い習慣は、1日や2日なら続けられるものもありますが、3ヶ月以上続けてしまうと、ましてや数年も続けるのは不可能になってしまいます。 「千マイルに到達することはできません。」毎日自分を鍛錬することを続けることによってのみ、私は成長することができます。なぜなら、私は天才ではなく、成長するには大変な努力が必要であることを知っているからです。

「地に足の着いた人間になり、物事を誠実に行います。」 私は自分の努力が報われると強く信じていますが、まだチャンスを掴めていません。最後に、.Net Core を使用した開発の最前線でご尽力されている方々に敬意を表したいと思います。上記のまとめは鶏がらスープを煮たものですが、仕事以外の先延ばし癖はいつになったら直りますか? 先延ばし癖、まだやるべきことがたくさんあるのについつい先延ばしにしてしまいます。何という悲劇でしょう。 。 。突然、槍山は巨大で、悪い習慣を変えるのは難しいことに気づきました。これは警告として受け取ってください。もちろん、仕事中毒にならないように、健康のほうが大切ですし、家族とより多くの時間を過ごすことができます。

セッション配信の詳細説明セッション配信の詳細説明セッション配信の詳細説明

個人的な意見、知識や経験により分析が偏っている場合もございますが、ご了承ください。 7. 参考記事

ASP.NET CoreはセッションキャッシュにRedisとProtobufを使用します


.Net Core セッションの使用

Asp.net Core は Redis を使用してセッションを保存しますセッション配信の詳細説明>

ASP.NET Core と MVC Core でセッションと HttpContext を使用する

.NET Core と .NET Framework Mono L の関係VirtualBox 設定の Ubuntu と Windows 共有フォルダー

分散型 asp.net core Web を構築する

ASP.NET Core データ保護

でこぼこ道: ASP.NET Core 1.0 ID 認証 (中央セット)

Net Core 1.0 は、負荷マルチサーバー シングル サインオンを実装します

以上がセッション配信の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。