session的使用方法詳解 Session是什麼呢?簡單來說就是伺服器給客戶端的一個編號。當一臺WWW伺服器運行時,可能有若幹個用戶瀏覽正在運正在這台伺服器上的網站。當每個用戶首次與這台WWW伺服器建立連接時,他就與這個伺服器建立了一個Session,同時伺服器會自動為其分配一個SessionID ...
session的使用方法詳解
Session是什麼呢?簡單來說就是伺服器給客戶端的一個編號。當一臺WWW伺服器運行時,可能有若幹個用戶瀏覽正在運正在這台伺服器上的網站。當每個用戶首次與這台WWW伺服器建立連接時,他就與這個伺服器建立了一個Session,同時伺服器會自動為其分配一個SessionID,用以標識這個用戶的唯一身份。這個SessionID是由WWW伺服器隨機產生的一個由24個字元組成的字元串,我們會在下麵的實驗中見到它的實際樣子。這個唯一的SessionID是有很大的實際意義的。當一個用戶提交了表單時,瀏覽器會將用戶的SessionID自動附加在HTTP頭信息中,(這是瀏覽器的自動功能,用戶不會察覺到),當伺服器處理完這個表單後,將結果返回給SessionID所對應的用戶。試想,如果沒有SessionID,當有兩個用戶同時進行註冊時,伺服器怎樣才能知道到底是哪個用戶提交了哪個表單呢。當然,SessionID還有很多其他的作用,我們會在後面提及到。
除了SessionID,在每個Session中還包含很多其他信息。但是對於編寫ASP或ASP.NET的程式與來說,最有用的還是可以通過訪問ASP/ASP.NET的內置Session對象,為每個用戶存儲各自的信息。例如我們想瞭解一下訪問我們網站的用戶瀏覽了幾個頁面,我們可能在用戶可能訪問到每個的頁面中加入:
通過以下這句話可以讓用戶得知自己瀏覽了幾個頁面:
可能有些有些讀者會問:這個看似像是數組的Session(“..”)是哪裡來的?需要我定義嗎?實際上,這個Session對象是具有ASP解釋能力的的WWW伺服器的內建對象。也就是說ASP的系統中已經給你定義好了這個對象,你只需要使用就行了。其中Session(“..”)中的..就好像變數名稱,Session(“..”)=$$中的$$就是變數的值了。你只需要寫上句話,在這個用戶的每個頁面中都可以訪問..變數中的值了。
其實ASP一共內建了7個對象,有Session、Application、Cookie、Response、Request、Server等。在其他的伺服器端腳本語言如JSP、PHP等中也有其類似的對象,只是叫法或者使用方法上不太一樣。
1、ASP 判斷Session變數是否存在的4種方法
如果去讀取沒有初始化的Session變數,將得到Empty值(空值)。所以可以利用該值來判斷Session變數是否已經初始化。加入我們要判斷名為sesName的變數是否已經建立,我們可以用以下4種方法:
1 If Session("sesName") = "" Then ...
2 If Session("sesName") = Empty Then ...
3 If IsEmpty(Session("sesName")) Then ...
4 If Cint(Session("sesName")) = 0 Then ...
其中第四種方法在Session變數沒有初始化的情況下使用Cint函數來進行轉換,將返回0值。
2、在ASP.NET中用if(Session[ "UserName "] == null) 來判斷Session變數的存在,不能用if(Session[ "UserName "] == "") 或者if(Session[ "UserName "] == " ") ,否則會報錯!
謹記:在ASP.NET中要在客戶端所有頁面都使用Session[..]變數,其一定要在protected void Page_Load(object sender, EventArgs e)定義,否則其他頁面的相同Session[..]為null,即不存在。如果Session[..]變數定義了就不為null,即使初始化為"",即Session[..]=“”;
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
Session["accountMode"] = "studentID";
Session["studentID"] = "";
Session["identityNo"] = "";
}
}
註意:未使用Session對象時不能複製給其他變數,否則報錯