Application,Session,Cookie,ViewStateとCacheの違い

12054 ワード

ASP.NETには、Application、Session、Cookie、ViewState、Cacheなど、情報を保存する内蔵オブジェクトがたくさんあります.それぞれの使い方と違いを紹介します.
方法
情報サイズ
役割ドメインと保存時間
適用範囲
保存場所
Application
任意のサイズ
アプリケーション全体のライフサイクル
アプリケーション全体/すべてのユーザー
サーバ側
Cache
任意のサイズ
必要に応じて設定できます
アプリケーション全体/すべてのユーザー
サーバ側
Session
小量、簡単なデータ
ユーザアクティビティ時間+遅延時間(一般的には20分)
単一ユーザー
サーバ側
Cookie
小量、簡単なデータ
必要に応じて設定できます
単一ユーザー
クライアント
Viewstate
小量、簡単なデータ
Webページのライフサイクル
単一ユーザー
クライアント
ドメインの非表示
小量、簡単なデータ
Webページのライフサイクル
単一ユーザー
クライアント
クエリー文字列
小量、簡単なデータ
次回ページジャンプリクエストまで
単一ユーザー
クライアント
 1.アプリケーションオブジェクト
Applicationは、すべてのユーザーの共通のデータ情報を保存するために使用されます.Applicationオブジェクトを使用する場合は、書き込み操作がApplication_にあることを考慮する必要があります.OnStartイベント(global.asax)で完了します.アプリケーションを使用してもロックとアプリケーションUnlockメソッドは書き込み操作の同期を回避するが、アプリケーションオブジェクトに対する要求をシリアル化し、ウェブサイトのアクセス量が大きい場合に深刻なパフォーマンスボトルネックを生じる.したがって、このオブジェクトで大きなデータセットを保存するのはやめたほうがよい.この問題をオンラインユーザー統計の例として説明します.(Webサイトの総アクセス量をファイルとして保存)
 
Global.asax 

using System;

using System.Collections;

using System.ComponentModel;

using System.Web;

using System.Web.SessionState;

using System.IO;

    /// Global      。

     public class Global : System.Web.HttpApplication

    {

        ///

        private System.ComponentModel.IContainer components = null;



        private FileStream fileStream;

        private StreamReader reader;//    

        private StreamWriter writer;//    

        

        public Global()

        {

            InitializeComponent();

        }    



        protected void Application_Start(Object sender, EventArgs e)

        {

            Application["CurrentGuests"]=0;//    0;

            fileStream = File.Open(Server.MapPath("counts.text"),FileMode.OpenOrCreate);//

            reader = new StreamReader(fileStream);//        

            Application["AllGuests"] = Convert.ToInt32(reader.ReadLine()); //                      

            reader.Close();//   

        }

 

        protected void Session_Start(Object sender, EventArgs e)//        ,    +1,    +1

        {

            Application.Lock();//  ,      

            

            Application["CurrentGuests"] =(int)Application["CurrentGuests"]+ 1;//      

            Application["AllGuests"] =(int)Application["AllGuests"]+ 1;//         

            fileStream = new FileStream(Server.MapPath("counts.text"),FileMode.OpenOrCreate,FileAccess.ReadWrite);//

            writer = new StreamWriter(fileStream);//

            writer.WriteLine(Application["AllGuests"].ToString());//                 

            writer.Close();//     



            Application.UnLock();//    

        }

        protected void Session_End(Object sender, EventArgs e)//         ,      -1,

        {

            Application.Lock();

            Application["CurrentGuests"] =(int)Application["CurrentGuests"] - 1;//       -1

            Application.UnLock();    

        }

    (2) WebForm1.aspx

    private void Page_Load(object sender, System.EventArgs e)

        {

            this.Label1.Text = "" + Application["CurrentGuests"].ToString();    

            this.Label2.Text ="" + Application["AllGuests"].ToString();

        }

2.SessionオブジェクトSessionは、各ユーザの専用情報を保存するためのものである.各クライアントユーザがアクセスする場合、サーバは、ユーザごとに一意のセッションID(SessionID)を割り当てる.彼女の生存期間は、ユーザが要求を継続する時間に加えて(一般的には20分程度)である.Sessionの情報はWebサーバのコンテンツに保存する、保存するデータ量は大きくても小さくてもよい.セッションがタイムアウトまたはクローズすると、保存するデータ情報が自動的に解放される.ユーザがアプリケーションの使用を停止する後もメモリに一定時間保持するため、Sessionオブジェクトを使用することでユーザデータを保存する方法の効率が低い.小量のデータに対して、Sessionオブジェクトを使って保存するのはやはり良い選択です.Sessionオブジェクトを使用して情報を保存するコードは次のとおりです.
//格納情報Session["key"="value"//データstring UserName=Session["key"].ToString();
3.Cookieオブジェクトは、クライアントブラウザから要求するサーバページの要求情報を保存するためのものであり、プログラマは、非感度のユーザ情報を保存するためのものであってもよく、情報保存の時間は必要に応じる設定することができる.Cookieの有効期限が設定されていない場合は、ブラウザプログラムを閉じるまで保存されます.CookieオブジェクトのExpiresプロパティをMinvalueに設定と、Cookieは期限切れになりません.Cookieに格納データ量は制限されており、多くのブラウザでは最大容量4 Kをサポートしているため、データセットや他の大量のデータを保存するために使用することはない.すべてのブラウザがCookieをサポートするわけではない、データ情報はクライアントのコンピュータに明文テキストとして保存されているため、機密で暗号化されていないデータは保存しないほうがよい、そうしないとサイトのセキュリティに影響を与える.Cookieオブジェクトを使用して保存したコードは次のとおりです.
//情報を保存するResponse.Cookies["key"].Value="value";//読み出し情報string UserID=Response.Cookies["key"].Value;
4.ViewStateオブジェクトViewStateは、ページの生存期間に等しい単一のユーザのステータス情報を保存するためによく使用されます.隠しコントロールと似ています.viewstateは、このページ内の各関数間で値を伝達するものであるが、なぜこの方法を使用するのかというと、1つのイベントが発生するとページがリフレッシュする可能性があり、定義グローバル変数がクリアされるためviewstateを使用する.ViewStateコンテナは大量のデータを保持できますが、使用しすぎるとアプリケーションのパフォーマンスに影響を与えるため、慎重に使用する必要があります.すべてのWebサーバコントロールは、ViewStateを使用してページの再送音に自分のステータス情報を保存します.コントロールが再送中にステータス情報を保存する必要がない場合は、不要なリソースの浪費を回避するために、オブジェクトのView Stateを閉じたほうがいいです.@Pageコマンドに「EnableView State=false」属性を追加することで、ページ全体のView Stateを禁止できます.ViewStateオブジェクトを使用して情報を保存するコードは次のとおりです.
//情報を保存するViewState[「key」=「value」;//string Name=View State["nameID"]を読み込む.ToString();
5.CacheオブジェクトCacheオブジェクトは、HTTPリクエスト間でページまたはデータを保存するために使用されます.このオブジェクトの使用は、アプリケーション全体の効率を大幅に向上させることができます.頻繁にアクセスする大量のサーバリソースをメモリに格納するのによく使用され、ユーザが同じ要求を発行した後、サーバは再び処理せずにCacheに保存された情報をユーザに返し、サーバが要求を処理する時間を節約する.その生存期間は、アプリケーションの生存期間に依存します.アプリケーションを再起動すると、Cacheオブジェクトのインスタンスが再作成されます.Cacheオブジェクトを使用して情報を保存するコードは以下のとおりです.
//格納情報Cache["nameID"="0001";//情報を保存するCache.Insert("nameID","0001"1);//string Name=Cache["nameID"].ToString();
   6.非表示ドメインHiddenコントロールは、HTMLタイプのサーバコントロールであり、このコントロールを使用して非表示ドメインの機能を実現します.実際には、このコントロールは他のサーバコントロールとあまり変わらないが、ユーザー側のブラウザには表示されず、常に非表示になっている.ただし、ページがコミットされるたびに、このコントロールは他のサーバコントロールとともにサーバ側にコミットされるため、サーバ側ではValueプロパティを使用してデータ情報を取得または保存できます.Hiddenコントロールを使用して情報を保存するコードは次のとおりです.
//情報を保存するValue="0001";//string Name=Hidden.Value;
  7.文字列を検索文字列を検索する方法は、渡す値をURLの後ろに接続し、Responseを通じて.Redirectメソッドは、クライアントのリダイレクトを実現します.このようにして、2つのページ間で情報を伝達することができる.URLの長さに一定の制限があるため、あまり大きな情報を伝えることができず、セキュリティもあまりよくありません.メッセージは以下の通りです.疑問符の後ろのフォーマットkey 1=value 1&key 2=value 2
  Response.Redirect("List.aspx?nameID=0001&gradeID=002");//上記の文を実行してIEアドレスバーに表示されるURLのコードは以下の通りです.  http://localhost/List.aspx?nameID=0001&grade=002//リストにジャンプすると.aspx後、伝達された情報は以下のコードで得ることができる.  string NameID.GradeID;  NameID=Request.Params["nameID"];  GradeID=Request.Params["gradeID"]; 
 
原文:http://www.cnblogs.com/yanwei067/archive/2008/04/04/1137419.html