少し大きめの ASP を書いたことがある人なら、Session オブジェクトが非常に使いやすく、安全で便利なユーザーのプライベート データ変数を記録できることを知っています。しかし、セッションがどのように機能するかを本当に知っていますか?
少し大規模な ASP を作成したことがある人なら、Session オブジェクトが非常に使いやすく、安全で便利なユーザーのプライベート データ変数を記録できることを知っています。しかし、セッションがどのように機能するかを本当に知っていますか?おそらく、それを理解した後は、この愛され嫌われている物体をあえて使用することはなくなるでしょう。代替方法は少し面倒ですが、長期的な検討の結果、これを実行する必要があります。まず、クライアントのプライベート データ変数を記録し、長期的に保存できるセッションの利点について説明します。範囲内では消えません。これは、特に使用する必要があるメンバーを含むシステムにとって、非常に重要な機能です。メンバーのログイン アカウント、時刻、
ステータス
、および記録すべき多くのリアルタイム データ (ユーザーのショッピング バスケット内の商品を記録するショッピング システムなど) など、この情報は各ユーザー、通常は開発者によって個人的に必要とされます。これはセッション レコードを使用して処理されます。 しかし、ASPにおけるセッションは
Cookie
で構成されており、サーバーはセッションに記録されたすべてのデータをCookieの形式でユーザーのブラウザに送信します。通常、ブラウザはこれらの Cookie を保存し、ユーザーがリンクをクリックしてサーバーに再度接続するたびに、これらの Cookie を処理のためにサーバーに送り返します。これはセッションの動作原理であり、データ量が多くなると、データの送信と返却が必要になるため、回線帯域を消費するだけでなく、サーバーがオンライン処理やメモリの再構成に多くのリソースを費やす必要があるため、パフォーマンスが低下します。 . 最初のアクション。 「この機能を使用する必要があるので、それを犠牲にしなければならない」と考えているかもしれませんが、この記事では、一方ではセッションの使用を減らすことを皆さんに教えています。次に考えられるのは、これも Global.asa アプリケーション オブジェクトに属するということです。 アプリケーションは一時データの記録と処理にも優れています。その機能と使用方法はセッションと同じですが、比較すると、記録されるデータはパブリック、つまり任意のユーザーが共有できる変数空間です。セッションとは異なり、アプリケーションはユーザーにデータを転送せず、次の接続後にデータをサーバー上のメモリに直接記録します。これに比べて、パフォーマンスはセッションよりもはるかに高速です。
Application オブジェクトはパブリックであるため、セッションをシミュレートするという目的を達成するために、最初に行う必要があるのは、各ユーザーがデータを記録するための独自の領域を持つことができるように、各ユーザーの共通領域を計画することです。現在、2 つの方法があります:
1. サーバーの起動時に、事前にユーザー メモリ領域を初期化、作成、割り当てます。通常、この方法はサーバーの起動直後に多くのリソースを占有しますが、その必要性も節約します。今後ユーザーが接続するたびに追加のリソースが必要になるため、配布を行う必要があります。ただし、この方法には最大人数を制限する必要があり、起動するとすぐに初期化されるため、一定量のメモリ領域の作成しか見積もることができないため、この方法は通常、小規模なプログラムで使用されます。チャットルームなど。
第二に、この方法は大規模なアプリケーションに適していると考えられ、動的割り当て方法が採用されており、ユーザーが最初にサーバーに接続したときにユーザーへのリソースの割り当てが開始されます。セッションをシミュレートするこれら 2 つの方法の目的は、セッション リソースの消費を減らすことですが、結局のところ、これらを完全に置き換えることはできません。それでも、セッションを少し使用する必要があります。これにより、少なくとも、セッションの負荷を大幅に軽減できます。サーバ。
第一計画
まず、第一計画の実装を開始します。アクティベーション中にアプリケーションが初期化されるので、当然、Global.asaから開始する必要があります:
初期化は完了しましたが、使い方は次のとおりです。それ?アカウント番号やログイン時間など、セッションを使用して元々保存されていたデータを、ユーザーがログインする場所で作成したアプリケーション オブジェクトに変更するだけです:
コードは次のとおりです:
' 寻找未被使用的空间 For i = 1 To Application("ClientMax") If Application("User_Status_" & i) = 0 Then '使用者暂时编号 Session("Index") = i '锁定 Application Application.Lock '设成已使用的状态 Application("User_Status_" & i) = 1 '放入变量数据 Application("User_Ac count _" & i) = Account Application("User_Log time _" & i) = Now() '解除锁定 Application.Unlock Exit For End If Next
ユーザー関連の変数データを取得するには、次のようにするだけです:
Response.Write(Application("User_Account_" & Session("Index"))
Session を使用しないとは言っていないことがわかるかもしれません。では、なぜ上記のソースコードにセッションが存在するのでしょうか? 前述したように、この代替案はセッションを完全に置き換えることはできず、同じ人が次回接続していることをどのようにして知ることができるのでしょうか?このとき、私たちはセッションに依存する必要があります。この数値は、銀行の金庫のようなものです。キーを持っていて、キーに番号が付いているので、店員が自分の金庫に誘導できます。ただし、小規模な用途には十分です。 2 番目のオプション
前のオプションと同様に、数値に関して言えば、Session オブジェクトは、それを使用するかどうかに関係なく、「SessionID」メソッドを提供します。 、サーバーは各ユーザーに番号を自動的に割り当てます。この番号は、Session.SessionID を使用して取得されます。これは、Session が行うアクションであり、代わりに使用できます。私たちが自分たちで作成した番号付けプログラムも、多くの労力を節約し、さらに拡張性が高くなります。ただし、基本的には、上記の最初のソリューションには、人数を制限するアプリケーションなど、まだ用途があります。次の 2 番目の代替案は、より大きな規模向けです。 1 秒あたり数百人、数千人、さらには数万人のユーザーがいる Web サイトの場合、ユーザー数の上限を 10,000 人に設定すると、これが役に立ちます。 10,000 ユーザーに対して 10,000 の領域を切り出すと、1 つの領域に 5 つの変数があり、各変数が 32 バイト (Byte) を占有する場合、10,000 個のメモリがすぐに 320000 K (320MB) 以上を占有します。サーバーがアクティブ化されると、戦場に行く前にパフォーマンスが大幅に低下することは間違いありません。これらの数値は小さいですが、上記の数値は最小値を想定したものであり、それは不明です。メモリを構成するときにサーバーが使用する追加リソースの数は増加するだけであり、減少することはありません。したがって、唯一の解決策は、ユーザーがサーバーに接続しているときにのみ領域を切り取ることです。そのため、事前に巨大なメモリを構成する必要はありません。
2 番目のオプションは実装が比較的簡単です。最初のオプションのすべてを破棄してください。Global.asa に移動する必要はありません。ユーザーのログイン場所とその他の便利な場所を変更するだけです。コードは次のとおりです:
'锁定 ApplicationApplication.Lock '放入变量数据 Application("User_Account_" & Session.SessionID) = Account Application("User_Logtime_" & Session.SessionID) = Now() '解除锁定Application.Unlock
Response.Write(Application("User_Account_" & Session.SessionID))
1.
ASP 無料ビデオチュートリアルASPセッションの簡単な例
3. 4. 5. ASPのSessionオブジェクトの3つのメソッドを紹介します以上がASPにおけるSessionの使い方スキルを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。