iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 22
0
Modern Web

ASP.NET Web Form 入門30天系列 第 22

[ASP.NET] 網頁常用物件-網頁資料儲存方式(Application、Session、Cookie、Cache)

本篇擷取重點:

  1. 網頁資料儲存方式的基本比較
  2. 網頁資料儲存方式的個別範例實做
    • Application
    • Cookies
    • Session
    • Page.Cache

一、網頁資料儲存方式的基本比較總覽

項目 變數 變數儲存位置 生命週期
Application 所有瀏覽器共用一個 伺服器 不關伺服器就一直存在
Cookies 一個瀏覽器一個 客戶端 通常存在1000分鐘,也可以自己設時間
Session 一個瀏覽器一個 伺服器 關掉網頁就消失。也可設定存活時間(預設為20分鐘)
Page.Cache 所有瀏覽器在同時間共用一個 伺服器 自己設定時間,時間到消失,不受網頁關閉或關機影響

==================================================================
貼心小補充

ViewState:

ViewState是儲存於用戶端(Client-Base)的狀態管理機制,只存在於使用者正在執行那一頁用來保存來回存取(Postback)之間的網頁和控制項的值,根據預設(EnableViewState=true),當ASP.NET執行網頁時,會收集網頁和所有控制項中的值並透過單一編碼(Base64)的字串,存放於隱藏表單欄位(hidden field)的值(Value)屬性中( _ VIEWSTATE),由於隱藏表單欄位是傳送至使用者端網頁的一部分,所有ViewState值會暫時存放在用戶端的瀏覽器中。

使用方式
application("變數名稱")=變數值

特點
使用ViewState前需先注意,ASP.NET 網頁中必須要有伺服器表單< form runat=”server”>,伺服器執行網頁值,ASP.NET網頁架構才能讀取/儲存隱藏欄位ViewState資訊,否則ViewState將無法正常運作。


我們可從下列範例中了解ViewState怎麼儲存

  1. 在網站的帳號登入頁面中,輸入了不正確的帳號(test444)密碼而登入失敗時,你會發現你仍停留在號登入頁面且剛才輸入的帳號仍保留在輸入欄位上。

https://ithelp.ithome.com.tw/upload/images/20190923/20120056rfT9WoR2ML.jpg

按滑鼠右鍵-檢視網頁原始碼,可以發現我們剛才在帳號欄輸入的test444,已被儲存在隱藏欄位中,如下:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="gQeviSKZZJ/Com9YcDDcklBCRk/P8lqLEXLLqKCSn1A08iBzsZuSrHH7usnXov5lHczadZryok5RD7+BGrggnlXS6DbFDxmoZUcEszKQ3tY=" />

  1. 我們再在網站的帳號登入頁面中,輸入了不正確的帳號(helloworld)密碼而登入失敗時,你會發現你仍停留在號登入頁面且剛才輸入的帳號仍保留在輸入欄位上。

https://ithelp.ithome.com.tw/upload/images/20190923/20120056GWokEQMXVL.jpg

按滑鼠右鍵-檢視網頁原始碼,可以發現我們剛才在帳號欄輸入的helloworld,也已被儲存在隱藏欄位中如下:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="r1lxS0TDNzZO1jYpf8uBZfDhoKJc6gQCzIJrRXq24/MsXwSAb8fqh+NuDNu9GoyHgBR18S0oZPtdmi+wWHsxvqQFF/8naNHl4sk3u5MzWzM3zKF/7gDILCxqyYmDqnbbbJPoGRhoBmdXSFoDaxx3ssOi/Pj8uHfKJFOaPqIQgow=" />
  1. 看出兩者的不同了嗎?

兩邊看似亂碼的部分,就是帳號欄輸入的內容(test444/helloworld)經過Base64編碼後產生的字串,而它儲存的位置就是隱藏表單欄位。

參考資料:
https://dotblogs.com.tw/marcus116/2011/05/24/25923
https://www.itread01.com/content/1547610687.html (使用步驟)
https://dotblogs.com.tw/hatelove/archive/2009/06/28/viewstate-session-cache-cookies-application-of-user-state.aspx

==================================================================


二、網頁資料儲存方式的個別範例實做

  1. Application

資料存放在伺服器端,會佔用伺服器系統資源。當IIS或網頁伺服器重新啟動、修改Global.asax、修改 web.config時, Application的值便會遺失。

使用方式:application("變數名稱")=變數值

==================================================================
貼心小補充

用途:不同使用者之間(不同連線)共用某些系統變數,例如:網頁瀏覽次數。

Q:因為網頁瀏覽次數變數是共用,所以會有互相搶用的問題,所以在修改該值時都應該先 Lock。
Application.Lock() → Application("count")+=1 → Application.UnLock()

==================================================================


  1. Cookies

將資料存在使用者的電腦中,大多瀏覽器限制檔案大小不得超過 4096 Bytes,每個網站最多存放20個 Cookie。通常用來記錄使用者名稱、帳號、上次到訪時間......等等。

使用方式:Response.Cookies("變數名稱").Value=變數值

==================================================================
貼心小補充

設定 Cookie 有效期限 Response.Cookies("變數名稱").Expires=Now.AddDays(180) '180天後到期
限制:同一網域名稱的網頁才能存取該網站所儲存的 cookies,因為資料是存在使用者的電腦中,傳送時是以明碼方式傳送,機密資料不建議以此方式儲存。

==================================================================


  1. Session

資料存放在伺服器端,安全性高,缺點為佔用伺服器的記憶體資源(每一連線便佔用一份記憶體空間),連線結束時會自動刪除。建議程式中隨時將不用的 Session 釋放掉,以免造成伺服器記憶體的負擔。

使用方式:session("變數名稱")=變數值

==================================================================
貼心小補充,其他常見的session使用方法:

  • Session.Remove() 移除 session 的某一個變數 。
  • Session.RemoveAll() 移除 session 的所有變數 (Session.clear()亦有相同效果)。
  • Session.Abandon() 移除 session 的所有變數,且會觸發 Session_End 事件
  • Session.TimeOut = 20 設定Session的 TimeOut時間。

參考資料:
https://dotblogs.com.tw/mis0800/2014/02/07/142823

==================================================================


  1. Page.Cache

資料存放在伺服器端,主要是以降低資料庫使用率為出發,舉例來說,今天電商網站的首頁可能會有很多商品,如果你今天每一個訪客到首頁你都去資料庫重新抓一次所有的資料,那對資料庫的負擔會非常非常大。可是呢,其實首頁的這些資訊基本上短期之內是不會變的,一個商品的價格不可能上一秒是一千元,下一秒就變成兩千元。所以這些不常變動的資料就很適合儲存起來,等到伺服器再次接到請求時若是發現已經看過且預存在Cache後,就可以用極快的速度撈出來,而不是再到資料庫裡面重新算一次,這樣的方式就是我們說的Cache(快取,或緩存)。

參考資料:
https://progressbar.tw/posts/93
https://blog.techbridge.cc/2017/06/17/cache-introduction/


參考資料:
https://blog.xuite.net/tolarku/blog/27528606-ASP.NET+application%E3%80%81session%E3%80%81cookie%E3%80%81Viewstate%E3%80%81Postback


此篇內容整理自多篇網路文章、PPT及自己的理解,但筆者也仍處在初階的學習過程,對程式概念的理解及判斷都尚不足,若有錯誤的地方,也煩請各位大大提點,先謝謝大家惹!!


明日(9/24)預定探討課題:


上一篇
[ASP.NET] 網頁常用物件-網頁跳轉的比較及實際範例說明
下一篇
[ASP.NET] 你 說 什 麼?!網頁設計竟然可以用拉的 ( ASP.NET 伺服器控制項)
系列文
ASP.NET Web Form 入門30天30

尚未有邦友留言

立即登入留言