ASP(Active Server Pages)テクノロジーのセッションオブジェクトは、会話中にユーザーの個人情報を保存するために使用されます。現在のユーザーのセッションオブジェクトで定義されている変数とオブジェクトは、ページ間で共有できますが、アプリケーションの他のユーザーがアクセスすることはできません。ステータス情報。
セッションオブジェクトには非常に重要なプロパティがあります。これは、セッションオブジェクトがリリースされる前にセッションオブジェクトが非アクティブのままであることができる時間を設定するために使用されます(デフォルト値は20分です)。タイムアウトプロパティによって設定された時間値が使い果たされると、セッションリソースがリリースされます。タイムアウト属性を介してセッションオブジェクトを破壊し、制限なしにサーバーで生成されるセッションオブジェクトを避け、サーバーリソースを保護します。ただし、実際のネットワーク開発では、セッションオブジェクトの障害とユーザーステータス情報の損失により、通常、申請プロセスを完了できないことがよくあります。
タイムアウト属性を使用してリソースをリリースする戦略はサーバーを保護する目的ですが、セッションオブジェクトの予測不可能な障害は、アプリケーションの開発において不利な点となっています。したがって、実際のアプリケーションの開発では、セッションオブジェクト障害の問題を解決する必要があります。
従来のソリューション
既存のソリューションはすべて、サーバー側のメソッドを使用して、セッションオブジェクト障害の問題を解決することです。典型的な治療方法は、失敗前の治療と失敗後の治療の2つのカテゴリに分けられます。
障害前の処理とは、セッションオブジェクトが発生する前に有効期限が切れる前に変数の転送およびその他の処理を指します。典型的なソリューションは、アプリケーションにタイマーを設定し、セッションオブジェクトが故障する5分前にタイマーをトリガーし、セッションオブジェクトのさまざまな変数とオブジェクトをリセットすることです。このメソッドは、サーバー側のタイマーをリアルタイムで維持する必要があり、プログラムがセッション全体でアクティブになるように保証する必要があるため、サーバーに追加の負荷を追加します。
障害後の処理とは、セッションオブジェクトの有効期限が切れた直後に処理するようユーザーに促すことを指します。典型的なソリューションは、セッションオブジェクトが失敗した後、サーバー側のブレークポイントを保存し、ユーザーに再度ログインして作業を完了し続けるように促すことです。この方法は簡単に実装できますが、ブレークポイントの自動回復が不完全であるため、再生プロセスの複雑さのために、エンドユーザーに不満と批判されることがよくあります。
上記の2種類のソリューションの欠点に応じて、プログラミングプラクティスでは、著者はCookieオブジェクトの特性を組み合わせて、クライアントのセッションレベル変数に共同でアクセスする方法を使用します。リソースだけでなく、ブレークポイントが自動的に復元されないという問題の問題も解決し、再びログインする問題も排除されます。
新しいソリューション
Cookieオブジェクトは、ブラウザとWebサーバーの間で渡すことができる現在のユーザーに関するデータを保存する情報の小さなパケットです。 Webアプリケーションでは、Cookieが各ユーザーの場所を追跡および記録するメカニズムを提供します。 Cookieの最も一般的な用途の1つは、WebアプリケーションまたはアクセスするURLにアクセスする最後のWebページの日時を節約することです。
通常、Cookieオブジェクトは、クライアントWindows SystemディレクトリのCookieサブディレクトリにファイルとして保存されます。 Cookieオブジェクトに保存されている情報データは、セッションレベルの変数をCookieオブジェクトにバックアップできます。クッキーオブジェクト。
Cookieオブジェクトには次のプロパティがあります。
●有効期限:Cookieオブジェクトが期限切れになる日付を設定します。
●ドメイン:ドメイン属性によってのみ決定されるメンバーとしてのCookieオブジェクトの送信を決定します。
●パス:Cookieオブジェクトの配信パスを決定します。
●セキュア:Cookieオブジェクトが安全かどうかを明確にする。
●Haskeys:Cookieオブジェクトに複数の値が含まれているかどうかを返します。
Cookieオブジェクトの有効期限が明示的に定義されていない場合、Cookieオブジェクトはユーザーセッションの終了時に期限切れになります。
ASPのリクエストコレクションとレスポンスコレクションを通じてオブジェクトを読み書きします。 Cookieオブジェクトに変数を作成するための構文は次のとおりです。
Response.Cookies(cookie)[(key)| .attribute] = value
ここで、CookieはCookieファイル名であり、キーは辞書要素を示し、属性はCookieの特定の性質であり、値はCookieに割り当てられた値です。たとえば、MyHobbyというCookieを作成し、その値を次のように割り当てるには、次のように、次の構文を使用します。
<%response.cookies(myhobby)=バスケットボール%>
クライアントマシンでCookieオブジェクトを読み取る方法は次のとおりです。
request.cookies(cookie)[(key)| .attribute]
その中で、Cookieは要求されたCookieの名前であり、キーはサブキー値の添え字であり、属性はCookie属性を示すために使用されます。たとえば、MyHobbyというCookieから情報を抽出し、その値をページに書き込むには、次の構文を使用してください。
<%request.cookies(myhobby)%>
HTTPページが要求ブラウザーに送信された後、HTTPページヘッダーをCookieオブジェクトに書き込むことができないことに注意してください。言い換えれば、HTML識別子がブラウザに送信された後、Cookie情報をブラウザに送信することはできません。
特定の実装
以下は、ASPテクノロジーに基づいたチャットルームの実装であり、Session Object変数障害の問題に対処する方法を紹介します。
●ユーザーがログインする前の初期セッションレベル変数:username(ログインユーザー名の保存に使用)。
<%session(username)=%>
// Cookieオブジェクトを初期化します
<%response.cookies(username)=%>
●ユーザーがログインしたら、セッションレベルの変数を設定し、クライアントCookieオブジェクトにバックアップします。
<%username = trim(request.for(username))%>
<%session(username)= username%>
//クライアントCookieオブジェクトへのセッションレベルの変数をバックアップします
<%response.cookies(username)= username%>
●ユーザーが発言すると、セッションレベルの変数が読み取られた場合、セッションレベルの変数の属性値がCookieオブジェクトを読み取ることで復元されます。
<%username = session(username)%>
//変数の有効期限が切れた場合は、クライアントCookieオブジェクトを検索します
<%username = then%>の場合
<%username = request.cookies(username)%>
<%username = then%>の場合
//ユーザーがログインせずにチャットルームに入ると、Cookieオブジェクトの属性値は空です。この時点で、ユーザーはエラーを発揮し、ユーザーログインページに頼るように求められます
<%response.redirect error.html%>
<%else%>
// Cookieオブジェクトからこのセッションレベルの変数を復元します
<%session(username)= username%>
<%end if>
<%end if>
●ユーザーがチャットルームを終了したら、セッションレベルのオブジェクトとCookieオブジェクトをクリアします。
<%session(username)=%>
//クッキーオブジェクトの属性値をクリアして、ユーザーがログインせずにチャットルームに入ることを避けます
<%response.cookies(username)=%>
上記のコードは実行され、Windows NT 4.0 + IIS 4.0 + IE 5.0環境で渡されます。
まとめ
クライアントのセッションレベルの変数にアクセスする方法は、シンプルで実用的であり、ユーザーによる強制ログインなどの問題を効果的に回避できます。