スポンサーリンク
スポンサーリンク

Blazor Server でセッションIDを取得する

.NET CoreASP.NET CoreBlazor ServerC#SPAVisual Studioセキュリティ対策

Blazor Server でセッション変数を取得するサンプルを作ったので参考にしてほしい。
ソースコードはGitHubで公開しています。

 

ソースコード構成

Visual Studio プロジェクト の Blazor Server テンプレートに、SessionID.razor を追加し、NavMenu.razor、Startup.cs、_Imports.razor を修正しています。

 

ソースコード変更内容を解説

_Imports.razor

・razorページ全体で使用する using のリストに、Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage を追加し、各razorページでセッション変数を扱えるようにしている。

 

Startup.cs

・services.AddHttpContextAccessor() を追加し、IHttpContextAccessor を利用可能にしている。
・services.AddSession(options => ) を追加し、セッションに関係するクッキーを設定している。
 Nameでクッキー名を設定。
 IsEssentialでクッキーは必須と設定。
・app.UseSession() を追加し、でセッション ミドルウェアを有効にしている。

 

NavMenu.razor

・<NavLink class=”nav-link” href=”SessionID”> を追加し、「セッションID」画面へのリンクを作成している。

 

SessionID.razor

・「セッションID」画面。
・IHttpContextAccessor.HttpContext.Session.Id からセッションIDを取得している。

 

注意点

Blazor Server でセッション変数を使用する場合 WebSocketが必須

 

セッションとセッションID について

・セッションIDが変わったタイミングが、セッションが変わったタイミングです。ブラウザを閉じるとセッションは閉じられます。
・ブラウザを閉じなくても、既定値だと20 分でWEBサーバ側のセッションがタイムアウトして閉じられます。
 参考=>ASP.NET Core でのセッション | Microsoft Docs
・Visual Studio でWEBアプリをデバッグ実行する際にホストされる IIS Express だと、セッションは継続しているのにブラウザを更新する度にセッションIDが変化しますが、これは IIS Express の特性で、Windows Server OS 上の IIS、Linux OS 上の Kestrel では起こりません。
・ブラウザはタブ毎にセッションを張らず、タブのセッションは共有されています。「全てのタブでクッキーは1つ」と同義。
 同じWebサイトへ、Edge、Chromそれぞれからアクセスした場合、Edge、Chromそれぞれ別のセッションになる。ブラウザ側のクッキー が別々に管理されている為。
・同じブラウザを複数立ち上げた場合、同じクッキー、同じセッションIDで接続しに行くので、Webサーバ側のセッションは共有されます。
・一般的には、各画面の全イベントハンドラに、ログイン時のセッションIDと現在の セッションID が違っていたらログイン画面へ遷移させるという、セキュリティロジックを加えます。

 

コメント

タイトルとURLをコピーしました