http://www.iteye.com/topic/10452#57430
http://gongmingwind.iteye.com/blog/587656
HTTP協議(http://www.w3.org/Protocols/)是“一次性單向”協議。
服務端不能主動連接客戶端,只能被動等待並答覆客戶端請求。客戶端連接服務端,發出一個HTTP Request,服務端處理請求,並且返回一個HTTP Response給客戶端,本次HTTP Request-Response Cycle結束。我們看到,HTTP協議本身並不能支持服務端保存客戶端的狀態信息。於是,Web Server中引入了session的概念,用來保存客戶端的狀態信息。
...
從理論上來說,這3個部分(Request
URL,Cookie Header, Message Body)都可以用來存放Session ID。由於Message Body方法必須需要一個包含Session ID的HTML Form,所以這種方法不通用。
一般用來實現Session的方法有兩種:
(1)URL重寫。
Web Server在返回Response的時候,檢查頁面中所有的URL,包括所有的連接,和HTML Form的Action屬性,在這些URL後面加上“;jsessionid=XXX”。
下一次,用戶訪問這個頁面中的URL。jsessionid就會傳回到Web Server。
(2)Cookie。
如果客戶端支持Cookie,Web Server在返回Response的時候,在Response的Header部分,加入一個“set-cookie: jsessionid=XXXX”header屬性,把jsessionid放在Cookie裏傳到客戶端。
客戶端會把Cookie存放在本地文件裏,下一次訪問Web Server的時候,再把Cookie的信息放到HTTP Request的“Cookie”header屬性裏面,這樣jsessionid就隨着HTTP Request返回給Web
Server。