HTTP是Stateless的通訊協定,
但是ASP.NET提供許多種狀態管理機制:
之前講過ViewState,今天則是要說網頁中很常用也很重要的的Cookie與Session。
不文謅謅的解釋了!
簡單來說就是瀏覽器提供每個網站各別存取的小資訊(網站之間不共用,瀏覽器之間不共用!)
透過Response,Request操作Cookie
新增設置:
HttpCookie hc = new HttpCookie("userInfo");
hc.Value = "Test";
hc.Expires = System.DateTime.Now.AddDays(7);//設定在瀏覽器的有效期限
Response.Cookies.Add(hc);
讀取使用:
if(Request.Cookies["userInfo"]!= null)
var info = Request.Cookies["userInfo"].Value;
**變更 Cookie 的到期日 (取自:MSDN,**曾經因為不懂它,就一直做紅色部分的傻事)
瀏覽器負責管理 Cookie,而 Cookie 的到期時間和日期可以協助瀏覽器管理 Cookie 的儲存。 因此,雖然您可以讀取 Cookie 的名稱和值,但是無法讀取 Cookie 的到期日期和時間。 當瀏覽器將 Cookie 資訊傳送至伺服器時,瀏覽器並不會包含到期資訊 (Cookie 的 Expires 屬性永遠會傳回為零的日期時間值)。如果您擔心 Cookie 的到期日,就必須重設它。
既然有用戶端的Cookie,反之,一定有存在伺服端的囉!!
透過SessionID來讓瀏覽器與伺服器能夠溝通知道誰是誰(多個網站Client才可以辨認),
透過獨特的演算法隨機產生SessionID來避免重複或受到竊取,
會放在URL或Cookie中(依照瀏覽器設置)在伺服器和瀏覽器之間傳遞,
(同一個使用者網頁之間可以透過Session傳遞資料)
直接使用操作Session物件:
Session["test"] ="直接使用"
if (Session["test"] != null)
{
var str = "超簡單" + Session["test"];
}
預設20~30分鐘沒有重新連線就會失效(依照IIS設置)
也可以手動要求刪除值(內容)或整個物件:
Session.Clear()跟Session.RemoveAll()
//清除所有內容,Session.Count可以得到0
Session.Abandon()
//則還會清除內容且結束工作狀態,網站運行中所以又產生新的工作狀態
(這部分有錯請指證)
雖然Session操作很簡單,但是其實還有許多功能可以調整如工作狀態或者想延長時間等等進階設定!
看似簡單卻又不簡單(當然先學會基本....但要知道背後的恐怖)