在做人事檔案管理系統中,對於Session和Cookie的使用後理解更加深刻了,下面對本知識點總結學習。
Session是什嗎?
簡單來說就是伺服器給用戶端的一個編號。當一台WWW伺服器運行時,可能有若干個使用者瀏覽正在運正在這台伺服器上的網站。當每個使用者首次與這台WWW伺服器建立串連時,他就與這個伺服器建立了一個Session,同時伺服器會自動為其分配一個SessionID,用以標識這個使用者的唯一身份。這個SessionID是由WWW伺服器隨機產生的一個由24個字元組成的字串,這個唯一的SessionID是有很大的實際意義的。當一個使用者提交了表單時,瀏覽器會將使用者的SessionID自動附加在HTTP頭資訊中,(這是瀏覽器的自動功能,使用者不會察覺到),當伺服器處理完這個表單後,將結果返回給SessionID所對應的使用者。除了SessionID,在每個Session中還包含很多其他資訊。但是對於編寫ASP或ASP.NET的程式與來說,最有用的還是可以通過訪問ASP/ASP.NET的內建Session對象,為每個使用者儲存各自的資訊。
Session 對象
當您操作某個應用程式時,您開啟它,做些改變,然後將它關閉。這很像一次對話(Session)。電腦知道是誰。它清楚在何時開啟和關閉應用程式。但是在網際網路上有一個問題:由於HTTP 地址無法存留狀態,網頁伺服器並不知道您是誰以及您做了什麼。
ASP 通過為每位使用者建立一個唯一的cookie 的方式解決了這個問題。cookie 被傳送至用戶端,它含有可識別使用者的資訊。這種介面被稱作 Session 對象。
Session對象用於儲存關於使用者的資訊,或者為一個使用者的 session 更改設定。儲存於 session對象中的變數存有單一使用者的資訊,並且對於應用程式中的所有頁面都是可用的。儲存於
session對象中的資訊通常是 name、id以及參數。伺服器會為每個新的使用者建立一個新的
Session,並在 session到期時撤銷掉這個 Session對象。
Session 何時開始?
Session 開始於:
- 當某個新使用者請求了一個 ASP 檔案,並且 Global.asa 檔案引用了 Session_OnStart 子程式時;
- 當某個使用者請求了一個 ASP 檔案,並且 Global.asa 使用 <object>標籤通過
session的 scope來例示某個對象時;
Session 何時結束?
假如使用者沒有在規定的時間內在應用程式中請求或者重新整理頁面,session就會結束。預設值為 20 分鐘。
如果您希望將逾時的時間間隔設定得更長或更短,可以設定Timeout屬性。
下面的例子設定了 5分鐘的逾時時間間隔:
<%Session.Timeout=5%>要立即結束 session,可使用 Abandon 方法:<%Session.Abandon%>
人事檔案中使用到的執行個體:
//判斷是否登陸成功 if (user.Exists(enUser.userID, enUser.pwd)) { enUser= user.GetModel(enUser.userID); //登入成功 Session["admin"] = enUser.realName; //txtUserName.Text.Trim(); //Session相當於一次會話,當關閉瀏覽器時菜終止會話。 //string strDateTime=DateTime.Now.ToString("yyyyMMddHHmmss"); Response.Redirect("List.aspx");
注意:使用session時主要的問題是它們該在何時結束。我們不會知道使用者最近的請求是否是最後的請求。因此我們不清楚該讓
session“存活”多久。為某個閒置 session等待太久會耗盡伺服器的資源。然而假如 session被過早地刪除,那麼使用者就不得不一遍又一遍地重新開始,這是因為伺服器已經刪除了所有的資訊。尋找合適的逾時間隔時間是很困難的,所以如果正在使用
session變數,請不要在其中儲存大量的資料。
Cookie 是什嗎?
Cookie伴隨著使用者請求和頁面在 Web 服務器和瀏覽器之間傳遞。使用者每次訪問網站時,Web 應用程式都可以讀取 Cookie 包含的資訊,指某些網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密)。
Cookie可以保持登入資訊存放在咱們的電腦裡的資料(.txt格式的文字檔),好讓伺服器用來辨認的電腦(經過自身網站自己的密碼編譯演算法加密了)到使用者下次與伺服器的會話,換句話說,下次訪問同一網站時,使用者會發現不必輸入使用者名稱和密碼就已經登入了(當然,不排除使用者手工刪除Cookie)。而還有一些Cookie在使用者退出會話的時候就被刪除了,這樣可以有效保護個人隱私,不同的瀏覽器有不同的cookie值,各自屬於自己的瀏覽器。
例如:csdn的登陸介面如果自己選擇記住一周其cookie的生命週期就是一周,等到了一周后會自動銷毀。
Cookie在產生時就會被指定一個Expire值,這就是Cookie的生存周期,在這個周期內Cookie有效,超出周期Cookie就會被清除。有些頁面將Cookie的生存周期設定為“0”或負值,這樣在關閉瀏覽器時,就馬上清除Cookie,不會記錄使用者資訊(登陸網上銀行的個人資訊),更加安全。
Cookie的建立:
ASP.NET中的cookie:建立Cookie方法 (1)
Response.Cookies["userName"].Value = “admin"; Response.Cookies[“userName”].Expires = DateTime.Now.AddDays(1); //如果不設定失效時間,Cookie資訊不會寫到使用者硬碟,瀏覽器關閉將會丟棄。
ASP.NET中的cookie:建立Cookie方法 (2)
HttpCookie aCookie = new HttpCookie(“lastVisit”); //上一次訪問時間 aCookie.Value = DateTime.Now.ToString(); aCookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(aCookie);
ASP.NET中的cookie:訪問Cookie方法
if(Request.Cookies["userName"] != null) Label1.Text = Server.HtmlEncode(Request.Cookies["userName"].Value);訪問Cookie方法(2) if(Request.Cookies["userName"] != null) { HttpCookie aCookie = Request.Cookies["userName"]; Label1.Text = Server.HtmlEncode(aCookie.Value); }
3:兩者的區別與聯絡
總結
Cookie的使用最主要的注意事項時其生命週期和其安全性,如何防止Cookie的欺騙是後續深入研究學習的,安全性上講,偽造session要比cookie難得多,session相對更安全一些.為了資料的安全與訪問方便,我們要好好的使用兩者為我們的軟體做好服務,為客戶提供可靠的資料。