js|session|基礎教程
術語session
在我的經驗裡,session這個詞被濫用的程度大概僅次於transaction,更加有趣的是transaction與session在某些語境下的含義是相同的。
session,中文經常翻譯為會話,其本來的含義是指有始有終的一系列動作/訊息,比如打電話時從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之為一個session。有時候我們可以看到這樣的話“在一個瀏覽器會話期間,...”,這裡的會話一詞用的就是其本義,是指從一個瀏覽器視窗開啟到關閉這個期間①。最混亂的是“使用者(用戶端)在一次會話期間”這樣一句話,它可能指使用者的一系列動作(一般情況下是同某個具體目的相關的一系列動作,比如從登入到選購商品到結賬登出這樣一個網上購物的過程,有時候也被稱為一個transaction),然而有時候也可能僅僅是指一次串連,也有可能是指含義①,其中的差別只能靠上下文來推斷②。
然而當session一詞與網路通訊協定相關聯時,它又往往隱含了“連線導向”和/或“保持狀態”這樣兩個含義,“連線導向”指的是在通訊雙方在通訊之前要先建立一個通訊的渠道,比如打電話,直到對方接了電話通訊才能開始,與此相對的是寫信,在你把信發出去的時候你並不能確認對方的地址是否正確,通訊渠道不一定能建立,但對發信人來說,通訊已經開始了。“保持狀態”則是指通訊的一方能夠把一系列的訊息關聯起來,使得訊息之間可以互相依賴,比如一個服務員能夠認出再次光臨的老顧客並且記得上次這個顧客還欠店裡一塊錢。這一類的例子有“一個TCP session”或者“一個POP3 session”③。
而到了web伺服器蓬勃發展的時代,session在web開發語境下的語義又有了新的擴充,它的含義是指一類用來在用戶端與伺服器之間保持狀態的解決方案④。有時候session也用來指這種解決方案的儲存結構,如“把xxx儲存在session裡”⑤。由於各種用於web開發的語言在一定程度上都提供了對這種解決方案的支援,所以在某種特定語言的語境下,session也被用來指代該語言的解決方案,比如經常把Java裡提供的javax.servlet.http.HttpSession簡稱為session⑥。
鑒於這種混亂已不可改變,本文中session一詞的運用也會根據上下文有不同的含義,請大家注意分辨。
在本文中,使用中文“瀏覽器會話期間”來表達含義①,使用“session機制”來表達含義④,使用“session”表達含義⑤,使用具體的“HttpSession”來表達含義⑥