C#中Cookie,Session,Application的用法與區別?


1.Application 儲存在服務端,沒有時間限制,服務器關閉即銷毀(前提是自己沒寫銷毀方法) 
2.Session 儲存在服務端,客戶端(瀏覽器)關閉即銷毀(若長時間不使用 且 瀏覽器未關閉的情況下, 默認自動銷毀時間為20分鍾) 

3.Cookie 儲存在客戶端,由用戶自己銷毀 

 

application:
程序全局變量對象,對每個用戶每個頁面都有效
session:
用戶全局變量,對於該用戶的所有操作過程都有效
cookie:
客戶端信息存放對象,可以把用戶的信息保存在用戶的本地,
不必總是訪問服務器
Application用於保存所有用戶共用的數據信息,如果被保存的數據在應用程序生存期內根本不會改變或很少改變,用它。但是在asp.net中有個web.config,可能更好點。如果要使用application,一個需要考慮的問題是任何寫操作都有要在application_onstart事件中(Global.asax)中完成。盡管使用application.lock和application.unlock方法來避免操作的同步,但是它串行化了對application的請求,當網站訪問量大時會造成性能瓶頸。因此最好不要用它存取大的數據集
使用方法:
//存放信息
Application["test"] = "100";
//讀取
String test = Application["test"].ToString();

Session 用於保存每個用戶的專用信息,它的生存期是用戶持續請求時間再加上一段時間(可以在web.config中設置,默認是20分鍾)。Session中的信息保存在服務器的內存中,當然你也可以設置它的保存方法(如存在SQL數據庫中)。由於用戶停止使用程序后它仍然在內存中保持一段時間,因此使用Session對象保存用戶數據的方法效率很低。對於小量的數據。使用Session還是一個不錯的選擇。

ASP Session的功能的缺陷
  目前ASP的開發人員都正在使用Session這一強大的功能,但是在他們使用的過程中卻發現了ASP Session有以下缺陷:

  進程依賴性:ASP Session狀態存於IIS的進程中,也就是inetinfo.exe這個程序。所以當inetinfo.exe進程崩潰時,這些信息也就丟失。另外,重起或者關閉IIS服務都會造成信息的丟失。 
  Session狀態使用范圍的局限性:剛一個用戶從一個網站訪問到另外一個網站時,這些Session信息並不會隨之遷移過去。例如:新浪網站的WWW服務器可能不止一個,一個用戶登錄之后要去各個頻道瀏覽,但是每個頻道都在不同的服務器上,如果想在這些WWW服務器共享Session信息怎么辦呢? 
Cookie的依賴性:實際上客戶端的Session信息是存儲與Cookie中的,如果客戶端完全禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。


//存
Session["user"] = "majcms";
//取
String username = Session["user"].ToString();

在web.config中進行如下配置
  <system.web>
  <sessionState mode="InProc" timeout="30"/>
  </system.web>

Cookie用於保存客戶瀏覽器請求服務器頁面的請求信息,程序員也可以用它保存非敏感性的內容。保存時間可以根據需要設置。如果沒有設置Cookie失效時間,它僅保存至瀏覽器關閉。如果將Cookie設置為Min Value,則表示它永不過期。Cookie存儲量受到很大限制,一般瀏覽器支持最大容量為4096字節。因此不能用來存儲大量數據。由於並非所有瀏覽器都支持Cookie,並且它是以明文方式保存的,所以最好不要保存敏感性的內容。否則會影響網絡安全

//創建、寫入Cookie

    HttpCookie cookie = Request.Cookies["MWS_User"];

    if (cookie == null)

    {

          cookie = new HttpCookie("MWS_User");

    }

    cookie.Values.Set("UserID", strUserID);

    Response.SetCookie(cookie);

 

二、讀取cookie:

HttpCookie cookie = Request.Cookies["MWS_User"];

if (cookie != null && cookie["UserID"].ToString() != "")

{

      Response.Write("cookie=" + cookie["UserID"].ToString());

 }


//存
Response.Cookies["name"].Value = "majcms";
//取
String username = Response.Cookies["name"].Value;

---------------------------------------------------------------------

//寫入
  protected void Button1_Click(object sender, EventArgs e)
  {
    HttpCookie cookie=new HttpCookie("MyCook");//初使化並設置Cookie的名稱
    DateTime dt=DateTime.Now;
    TimeSpan ts = new TimeSpan(0, 0, 1,0,0);//過期時間為1分鍾
    cookie.Expires = dt.Add(ts);//設置過期時間
    cookie.Values.Add("userid", "userid_value");
    cookie.Values.Add("userid2","userid2_value2");
    Response.AppendCookie(cookie);
    //輸出該Cookie的所有內容
    //Response.Write(cookie.Value);//輸出為:userid=userid_value&userid2=userid2_value2 
  }

  //讀取
  protected void Button2_Click(object sender, EventArgs e)
  {

    // HttpCookie cokie = new HttpCookie("MyCook");//初使化
    if (Request.Cookies["MyCook"]!=null)
    {
      //Response.Write("Cookie中鍵值為userid的值:" + Request.Cookies["MyCook"]["userid"]);//整行
      //Response.Write("Cookie中鍵值為userid2的值" + Request.Cookies["MyCook"]["userid2"]);
      Response.Write(Request.Cookies["MyCook"].Value);//輸出全部的值
    }
  }

  //修改Cookie
  protected void Button3_Click(object sender, EventArgs e)
  {
    //獲取客戶端的Cookie對象
    HttpCookie cok = Request.Cookies["MyCook"];
        
    if (cok != null)
    {
      //修改Cookie的兩種方法
      cok.Values["userid"] = "alter-value";
      cok.Values.Set("userid", "alter-value");

      //往Cookie里加入新的內容
      cok.Values.Set("newid", "newValue");
      Response.AppendCookie(cok);
    }      
  }

  //刪除Cookie
  protected void Button4_Click(object sender, EventArgs e)
  {

    HttpCookie cok = Request.Cookies["MyCook"];
    if (cok != null)
    {
      if (!CheckBox1.Checked)
      {
        cok.Values.Remove("userid");//移除鍵值為userid的值      }      else      {        TimeSpan ts = new TimeSpan(-1, 0, 0, 0);        cok.Expires = DateTime.Now.Add(ts);//刪除整個Cookie,只要把過期時間設置為現在      }      Response.AppendCookie(cok);   

                  } 

              }

 

 

session: 該對象是HttpSession 類型的對象,描述一個客戶端與服務器之間的一次通話時
段,該段時間內包含客戶端的若干次請求和服務器的相應響應,整個時間段session 對象都
存在。常用來實現購物車之類的存儲當前用戶的數據。不同用戶有各自的不同session 對象。
application: 該對象是ServletContext 類型的對象,描述的是本身Web 程序。該對象在
Web 程序部署到tomcat 服務器時由容器產生,其生命周期至Web 程序從tomcat
服務器卸載出去時消失。是所有客戶端能共享的一個
全局對象,整個系統只有一份。
Cookie以文件的形式保存的請求信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM