セッション紛失問題の詳細

3134 ワード

ASP.NET2.0プロジェクトでセッションが失われた問題
 
asp.NetのSessionはHttpModule技術に基づいて作られており、HttpModuleはリクエストが処理される前にリクエストを状態制御することができ、Session自体が状態メンテナンスに用いられるため、HttpModuleでSessionを行うのが最適である.
 
ASP.NETはSessionオブジェクトを提供し、プログラマが同じブラウザオブジェクトからサーバ上の特定のネットワークアプリケーションに対するいくつかの二次要求のコンテキスト情報を識別、記憶、処理することを可能にする.Sessionはブラウザとサーバの同じセッションに対応し、ブラウザがネットワークアプリケーションのページを最初に要求すると、サーバがSession_をトリガーします.onStartイベント;セッションがタイムアウトまたはクローズされるとセッションがトリガーされます.onEndイベント.プログラマは、コード内で2つのイベントに応答して、同じセッションに関連するタスクを処理することができます.たとえば、このセッションで使用するリソースを開いたり解放したりすることができます.ASP.NETのプログラムでSessionオブジェクトを使用する場合は、ページの@page命令のEnableSessionState属性がTrueまたはReadonlyであり、webであることを確認する必要がある.configファイルにSessionStateプロパティが正しく設定されています.  ASP.NETにおけるSessionの状態保持はweb.configファイルのタグの下のタグのmode属性によって決定される.この属性には、Off、Inproc、StateServer、SQlServerの4つの可能な値があります.
1、Offにするとセッションが無効になります. 
2、Inprocはデフォルトの設定で、このモードは以前のASPのセッション状態の方法と似ていて、セッションの状態はASPに保存されます.NETプロセスでは、パフォーマンスが明らかになります.プロセス内のデータへのアクセスは、誇張プロセスよりも自然に速くなります.しかし、この方法のSessionの状態はASPに依存する.NETプロセスは、IISプロセスがクラッシュしたり、正常に再開されたりすると、プロセスに保存されている状態が失われます. 
3、Inprocモードの欠点を克服するため、ASP.NETは、2つのプロセス外でセッション状態を維持する方法を提供します.  ASP.NETはまずWindowsサービスを提供した:ASPState、このサービスが起動した後、ASP.NETアプリケーションは、mode属性を「SateServer」に設定して、このWindowsサービスが提供するステータス管理方法を使用することができます.Web以外はconfigファイルにmode属性をStateServerとするほか、StateServerサーバを実行するIPアドレスとポート番号を設定する必要がある.IISが存在するマシンでStateServerを実行する場合、IPアドレスは127.0.0.1であり、ポート番号は通常42424である.mode="StateServer"stateConnectionString="tcpip=127.0.0.1:42424"このモードを使用すると、セッションステータスのストレージはIISプロセスの失敗や再起動に依存せず、セッションのステータスはStateServerプロセスのメモリ領域に格納されます.   
4、もう一つのセッションステータスモードはSQLServerモードである.このモードは、セッションのステータスをSQL Serverデータベースに保存します.このモードを使用する前に、少なくとも1台のSQLサーバが必要であり、サーバに必要なテーブルとストレージ・プロシージャを確立する必要があります.NET SDKは2つの足が本来この作業を簡略化することを提供した:InstallSqlState.sqlとUnInstallSqlState.sql.この両国の文書は以下のパスに保存されています:<%SYSTEMDRIVER%>WinntMicrosoft.NETFramework<%version%>SQLサーバを構成するには、コマンドラインでSQLサーバが提供するコマンドラインツールosqlを実行します.exe  osql -s [server name] -u [user] -p [password]  
私が使っているのは:
<sessionState   mode="StateServer"   cookieless="false"   timeout="60"   stateConnectionString="tcpip=localhost:42424"/> 

 
注意:modeをStateServerに設定する場合は、StateServerサービスをオンにしてください.システムサービスではASPというサービス名が表示されます.NET State Serviceのサービスは、デフォルトでは起動しません.手動で開く必要があります.