使用 Google 搜尋本站文章:
首頁 | CodeCharge 討論板 | 部落格 | ASP.NET 電子書 | 相簿 | News | 網站導讀 | 聯絡 Allen | 訂閱 RSS
 
since 2004 
 


如何暫存資料

By Allen Kuo, 建立日期:2008/03/12 22:00
如果您想針對每個網站使用者暫存一些資料...
    加入書籤: 收進你的MyShare個人書籤

如果您的網站要有會員機制, 例如必需登入會員才能在留言板留言或者要先登入才能購物, 那麼在使用者登入成功後, 您會希望將目前使用者的帳號先記下來, 以便稍後要留言時, 用來判斷目前使用者是否能使用此功能。 ASP.NET提供了一些機制讓您儲存這類暫存的資料。

Application 物件, 存放在 Application 裡的值,是每個使用者共用的, 因此比較不適合用來存放目前使用者帳號, 因為稍後您會搞不清楚。它通常被用來存放"目前合計有多少人到訪本網站"這類大家共用的資訊。

Cookie 物件, 它存放在使用者的電腦裡, 可以考慮用它, 不過 Cookie對於數量及容量都有限制, 因此不宜用它來存太多種,或大量的資料, 若用它來存使用者帳號,是ok的。

Session 物件, 它存放在 web server, 算是常被採用的方法, 不同使用者存放的值不會互相混淆, 缺點則是會佔掉 web server的資源, 萬一網站人非常非常多時, 就會有影響, 若網站的人不多,情況倒是不會太嚴重。

若使用者帳號是allen,您可以寫成

Session["userid"]="allen";

就可以將值存到session裡了, 稍後若要取用,則寫成

string currentUserID = Session["userid"].ToString();

將資料存放在 Session 裡的風險是會 Timeout, 因此重要的資料不宜存放在 Session 裡, 以上述的例子, 如果 user id 不見了, 系統會認為使用者還沒登入, 那麼使用者只需要重新登入即可, 但如果您在寫的是 blog 程式, 會員登入並花了一小時撰寫文章,而在 submit 後卻因為 session timeout而無法存檔, 就會讓使用者感覺操作不順暢; 或者使用者買了 10 項商品後暫時離開位子,稍後回來想繼續購買時發現剛剛買的已不見了,對網站的業績就有影響。

當您要存放使用者的暫存資料時, 多半可以有 3 種考量:

1. cookie 不會 timeout, 甚至可以在下次開機後仍存在, 缺點是它有容量限制,而且使用者有可能會偷偷改它, 比較沒那麼安全

2. session , 會 timeout, 使用 web server 的資源, 使用者無法偷改此值,安全性高一些

3. viewstate, 存放在網頁裡,缺點是多半用在連續的二個網頁之間傳遞資料, 由於利用網頁存放, 因此沒有 timeout 問題, 但會加大網路傳輸的量(若使用者不多,就沒什麼關係), 它可能會被使用者看到資訊, 安全性較差些


回應


姓名: (必填)
Email:
內容: (必填)
驗證碼:   (請輸入圖片中的文字,不區分大小寫)
Copyright © AllenKuo.com , 2000 - 2012, Version 11.08