セッションはセッション状態とも呼ばれ、Webシステムで最も一般的に使用される状態であり、現在のブラウザインスタンスに関連するいくつかの情報を維持するために使用されます。ユーザーの権限を制御するときにユーザーのステータスを保存するために Session をよく使用します。この記事では、Session の保存方法、web.config での Session の設定方法、Session のライフサイクルなどについて説明します。
1.セッションの保存方法。
セッションは実際にはクライアント側のセッションとサーバー側のセッションに分かれています。
ユーザーが初めてWebサーバーとの接続を確立すると、サーバーは識別情報としてSessionIDをユーザーに配布します。 SessionID は 24 文字のランダムな文字列です。ユーザーがページを送信するたびに、ブラウザーは HTTP ヘッダーに SessionID を含めて Web サーバーに送信します。これにより、Web サーバーは現在ページを要求しているクライアントを区別できます。この SessionID はクライアントに保存され、クライアント セッションに属します。
実際、クライアントのセッションはデフォルトでCookieの形式で保存されるため、ユーザーがCookieを無効にすると、サーバーはSessionIDを取得できなくなります。現時点では、url メソッドを使用してクライアント セッションを保存できます。つまり、SessionID を URL に直接記述します。 もちろん、この方法は一般的には使用されません。
ここで言及するセッションのほとんどは、サーバー側のセッションを指します。 3 つの保存方法があります (カスタマイズされた保存方法についてはここでは説明しません):
1.1 IIS プロセスに保存:
IIS プロセスに保存とは、IIS の実行プロセス、つまり、 inetinfo.exe プロセス。これはデフォルトのセッション保存方法でもあり、最も一般的に使用される方法です。
この方法の利点は、シンプルさと最高のパフォーマンスです。ただし、IIS サーバーを再起動するとセッションが失われます。
1.2. StateServer に保存
このストレージ モードは、Asp.Net 補助プロセスまたは IIS アプリケーション プールから独立した、Asp.Net State Service と呼ばれるプロセスにセッション データを保存することを指します。このモードでは、Web アプリケーションの再起動時にセッション状態が確実に保持され、ネットワーク内の複数の Web サーバーでセッション状態を利用できるようになります。
1.3. SQL Server データベースに保存する
このような設定を実行するには、プログラマはまず SQL Server データ サーバーを準備する必要があります。 .NET を自動的に実行し、インストール ツールを使用してステータス データベースをインストールします。
このメソッドはメモリとディスクに保存されるため、サーバーがハングして再起動した後も存在します。
これら 3 つのメソッドの比較は次のとおりです。物理的な場所
Windowsサービスプロセス(メモリ) |
SQLServerデータベース(ディスク) |
ストレージタイプの制限 | |
無制限 |
シリアル化できるタイプ | シリアル化できるタイプ |
ストレージサイズ制限 |
無制限 |
使用範囲 | 現在のリクエストコンテキスト、ユーザーごとに独立 | |
最初に訪問するとき初めて Web サイトにアクセスすると、セッションが作成され、タイムアウト後に破棄されます | |||
パフォーマンスが高い | セッションは Web サーバーに依存せず、簡単には失われません | ||
| 欠点失われやすい | ||
シリアル化と逆シリアル化はCPUリソースを消費します |
シリアル化と逆シリアル化はCPUリソースを消費し、ディスクからのセッションの読み取りが遅くなります |
使用原則 | |
大量のデータを保存しないでください |
2. web.configでセッションを設定する Web.configファイルのセッション設定情報: <sessionState mode= cookieless= timeout= stateConnectionString= sqlConnectionString= stateNetworkTimeout= /> セッション情報を保存するモード設定: — Offはセッション機能を使用しないように設定; —— InProc は、デフォルト値である ASP の保存方法であるセッションを保存するように設定されています。 — —SQLServer の設定により、セッションが SQL Server に保存されます。
cookieless クライアントのセッション情報が保存される場所を設定します: - cookieless モードを使用すると、クライアントのセッション情報は Cookie を使用して保存されなくなり、URL を通じて保存されます。たとえば、URL は http://www.php.cn/(ulqsek45heu3ic2a5zgdl245)/default.aspx — false デフォルト値である Cookie モードを使用します。
タイムアウトは、サーバーがセッション情報を自動的に放棄するまでの分数を設定します。デフォルトは 20 分です。
stateConnectionString は、状態サービスにセッション情報を保存するときに使用されるサーバー名とポート番号を設定します (例: "tcpip=127.0.0.1:42424")。この属性は、mode の値が StateServer の場合に必須です。 (42424 がデフォルトのポートです)。 sqlConnectionString SQL Serverに接続する際の接続文字列を設定します。たとえば、「データ ソース = localhost;統合セキュリティ = SSPI;初期カタログ =northwind」などです。この属性は、mode の値が SQLServer の場合に必須です。
stateNetworkTimeout は、StateServer モードを使用してセッション状態を保存した後、Web サーバーとステータス情報を保存するサーバー間の TCP/IP 接続が切断されるまでのアイドル秒数を設定します。デフォルト値は 10 秒です。 StateServer と SqlServer を使用してセッションを保存する方法について話しましょう 2.1 StateServer 最初のステップは、状態サービスを開くことです。 [コントロール パネル] → [管理ツール] → [サービス] コマンドを順に開き、ASP.NET ステータス サービスを見つけてサービスを右クリックし、[開始] を選択します。 セッションを保存するために状態サービスを使用することを正式に決定した場合は、サービスを自動開始するように変更することを忘れないでください (サービスはオペレーティング システムの再起動後に自動的に開始できます)。サービスが原因で Web サイトのセッションが使用不能になります
2 番目のステップ 1: system.web ノードに追加します: stateNetworkTimeout="20"> stateConnectionString は、状態サーバーの通信アドレス (IP: サービス ポート番号) を表します。現在このマシンでテストしているため、ここではローカル マシンのアドレス 127.0.0.1 を設定します。ステータス サービスのデフォルトのリスニング ポートは 42422 です。もちろん、レジストリを変更してステータス サービスのポート番号を変更することもできます。 (レジストリを変更して状態サービスのポート番号を変更する方法: 操作中に regedit と入力してレジストリ エディタを起動します - HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesaspnet_stateParameters ノードを順番に開き、[ポート] オプションをダブルクリックします - 基数を 10 進数として選択し、ポート番号を入力してください。) 2.2 SqlServerSQL ServerでInstallSqlState.sqlというスクリプトファイルを実行します。このスクリプト ファイルは、特にセッション情報を保存するためのデータベースを SQL Server に作成し、セッション情報データベースを維持する SQL Server エージェント ジョブを作成します。ファイルは次のパスで見つかります: [システム ドライブ]winntMicrosoft.NETFramework[バージョン] 次に、クエリ アナライザーを開き、SQL Server サーバーに接続し、今作成したファイルを開いて実行します。しばらく待つと、データベースとジョブが作成されます。この時点で、Enterprise Manager を開くと、ASPState という新しいデータベースが追加されたことがわかります。 modeの値をSQLServerに変更します。同時に sqlConnectionString の値も変更する必要があることに注意してください。形式は次のとおりです: sqlConnectionString="data source=localhost; Integrated Security=SSPI;" (これは Windows 統合認証を使用します) 3. セッションライフ サイクル セッションのライフ サイクルについては、実際には最初のセクションで説明しており、さまざまなストアド プロシージャに関連しています。
4. Session をトラバースして破棄する 4.1 トラバーサル:
System.Collections.IEnumerator SessionEnum = Session.Keys.GetEnumerator(); (SessionEnum.MoveNext()) { Response.Write(Session[SessionEnum.Current.ToString()].ToString() + ); } 4.2 破棄: Session.Abandon()。 セッションの保存方法と設定ファイルに関する詳細なチュートリアルについては、php 中国語 Web サイトに注目してください。 |