服務(wù)熱線
153 8323 9821
從網(wǎng)上看到這篇文章,非常實(shí)用轉(zhuǎn)過(guò)來(lái)分享一下,除了這一句下邊一字未改。這里用一個(gè)形象的比喻來(lái)解釋session的工作方式。假設(shè)Web Server是一個(gè)商場(chǎng)的存包處,HTTP Request是一個(gè)顧客,第一次來(lái)到存包處,管理員把顧客的物品存放在某一個(gè)柜子里面(這個(gè)柜子就相當(dāng)于Session),然后把一個(gè)號(hào)碼牌交給這個(gè)顧客,作為取包憑證(這個(gè)號(hào)碼牌就是Session ID)。顧客(HTTP Request)下一次來(lái)的時(shí)候,就要把號(hào)碼牌(Session ID)交給存包處(Web Server)的管理員。管理員根據(jù)號(hào)碼牌(Session ID)找到相應(yīng)的柜子(Session),根據(jù)顧客(HTTP Request)的請(qǐng)求,Web Server可以取出、更換、添加柜子(Session)中的物品,Web Server也可以讓顧客(HTTP Request)的號(hào)碼牌和號(hào)碼牌對(duì)應(yīng)的柜子(Session)失效。顧客(HTTP Request)的忘性很大,管理員在顧客回去的時(shí)候(HTTP Response)都要重新提醒顧客記住自己的號(hào)碼牌(Session ID)。這樣,顧客(HTTP Request)下次來(lái)的時(shí)候,就又帶著號(hào)碼牌回來(lái)了。
閱讀本文章前,需要讀者對(duì)以下知識(shí)有所了解。否則,閱讀過(guò)程中會(huì)在相應(yīng)的內(nèi)容上遇到不同程度的問(wèn)題。
Session 是什么呢?簡(jiǎn)單來(lái)說(shuō)就是服務(wù)器給客戶端的一個(gè)編號(hào)。當(dāng)一臺(tái)WWW服務(wù)器運(yùn)行時(shí),可能有若干個(gè)用戶瀏覽正在運(yùn)正在這臺(tái)服務(wù)器上的網(wǎng)站。當(dāng)每個(gè)用戶首次與這臺(tái) WWW服務(wù)器建立連接時(shí),他就與這個(gè)服務(wù)器建立了一個(gè)Session,同時(shí)服務(wù)器會(huì)自動(dòng)為其分配一個(gè)SessionID,用以標(biāo)識(shí)這個(gè)用戶的唯一身份。這個(gè)SessionID是由WWW服務(wù)器隨機(jī)產(chǎn)生的一個(gè)由24個(gè)字符組成的字符串,我們會(huì)在下面的實(shí)驗(yàn)中見(jiàn)到它的實(shí)際樣子。
這個(gè)唯一的 SessionID是有很大的實(shí)際意義的。當(dāng)一個(gè)用戶提交了表單時(shí),瀏覽器會(huì)將用戶的SessionID自動(dòng)附加在HTTP頭信息中,(這是瀏覽器的自動(dòng)功能,用戶不會(huì)察覺(jué)到),當(dāng)服務(wù)器處理完這個(gè)表單后,將結(jié)果返回給SessionID所對(duì)應(yīng)的用戶。試想,如果沒(méi)有SessionID,當(dāng)有兩個(gè)用戶同時(shí)進(jìn)行注冊(cè)時(shí),服務(wù)器怎樣才能知道到底是哪個(gè)用戶提交了哪個(gè)表單呢。當(dāng)然,SessionID還有很多其他的作用,我們會(huì)在后面提及到。
除了 SessionID,在每個(gè)Session中還包含很多其他信息。但是對(duì)于編寫(xiě)ASP或ASP.NET的程序與來(lái)說(shuō),最有用的還是可以通過(guò)訪問(wèn) ASP/ASP.NET的內(nèi)置Session對(duì)象,為每個(gè)用戶存儲(chǔ)各自的信息。例如我們想了解一下訪問(wèn)我們網(wǎng)站的用戶瀏覽了幾個(gè)頁(yè)面,我們可能在用戶可能訪問(wèn)到每個(gè)的頁(yè)面中加入:
| <% If Session("PageViewed") = ""Then Session("PageViewed") = 1 Else Session("PageViewed") = Session("PageViewed") + 1 End If %> |
| <% Response.Write("You have viewed " & Session("PageViewed") & " pages") %> |