session的引入:
鑒於http是無狀態的協議,當完成客戶端和服務器的傳遞信息後,就斷開之間的聯系,這樣就造成了怎麼樣在幾個頁面之間傳遞信息
比如客戶端信息,或者假如是寫一個購物程序,就要記得購物車裡面的信息,JSP提供了四種方法來跟蹤客戶的狀態
1:建立匿名的表格字段
2:使用url傳遞
3:使用持久化的cookIEs
4:使用session 的會話機制
相對於安全級別來說第四種最高了,session是指在一段時間內客戶端和服務器之間的一連串的相關的交互過程。
在一個session中客戶可能會訪問不同的服務器資源,也可能會多次訪問同一個頁面。
sevlet容器為httpsession分配一個唯一的標識,成為sessionid,容器會把sessionid放在客戶端的cookIEs中,每次客戶端發出http請求的時候,servlet可以把httdivquest對象中讀取sessionid。然後更具sessionid找到對應的session對象,從而取得客戶端狀態信息。
session的方法:
getid()取得session的id號。
setattribuate(string name,object obj)保存一對name、value對象
getattribute(String name)獲取name的屬性
isnew()判斷session時候是新建的。
廢除sesion對象的方法"
1:setmaxinactival()通過設置最大不活動時間
2:關閉客戶端浏覽器
3:調用session的invalidate()方法
如果客戶端不支持cookIEs時,那麼session的id號就不能保存,那麼在Java API中提出了一種跟蹤session的方法,容器可以重寫客戶請求的url,把sessionid添加倒url中response.encodeurl("**.JSP");
session的高級主題:session的持久化當一個session開始時,容器會為之創建一個session對象,但是如果又10000個人同時登錄呢,這時就要把信息從內存中轉移到文件系統中或者數據庫中,當需要訪問的時候再調用倒內存中,提高內存的利用率,也便於恢復數據(故障會丟失信息)。
從內存到文件系統活著數據庫,采用了java語言的對象序列化技術,把對象從文件活著數據庫中提取到內存中使用了Java語言提供的對象反序列化技術。