国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【Servlet】04-使用Session

2019-11-08 01:50:18
字體:
來源:轉載
供稿:網友

如果,我們需要保留用戶的狀態信息,則可以嘗試使用session(HTTP是無狀態的嘛!)

假設我們有如下場景:

-Hey,Siri! -我有什么可以幫你的? -給我講一個冷笑話。 -好的,blahblah。 -再來一個。 -對不起,我沒聽懂你在說什么。

如何讓Siri能夠上下文聯想呢?Session機制這時候就很有用,Session機制提供的是:

同一用戶同一Session不同請求不同線程

Session是這樣開始工作的:

Created with Rapha?l 2.1.0客戶端客戶端服務器服務器發送一個請求設置Cookie/唯一的SessionID再次請求+上次的Cookie

容器為我們做了絕大多部分工作:

創建會話生成SessionID(向客戶端設置set-cookie首部)ID與會話匹配

我們唯一需要做的事就是:

// 這行代碼不創建SessionHttpSession session = request.getSession(false);if (session == null) { session = request.getSession();}

如果我們恰巧禁用了Cookie,我們需要使用URL重寫技術

// 向someurl增加額外的會話IDresponse.encodeURL(someurl);

會話的技術問題解決了,但是為了服務器的負擔問題,我們不可能一直在服務器端保留用戶的會話信息,會話存活問題也就需要解決。

我們查看HttpSession的API之后,有如下列表:

方法名 返回結果 作用
getCreateTime() 創建時間的毫秒 獲取Session的創建時間
getLastaccessedTime() 上次訪問時間的毫秒 同左
setMaxInactiveInterval() X 設置session存活時間,單位為秒
invalidate() X session失效

P.S. 我們可以在DD中設置Session的存活時間:

<session-config> <!--單位為分鐘--> <session-timeout></session-timeout></session-config>

作為客戶端驗證的工具Cookie,我們有如下方法:

方法名 返回結果 作用
getCookies() 獲取所有的Cookie 同左
setMaxAge() 設置Cookie的優秀時間,單位為秒數 X
addCookie() 設置一個Cookie 同左

下面,我們來探討一下分布式應用中的Session問題。 我們知道的是,對于一個分布式應用,每個VM的Servlet有一個ServletContext,有一個ServletConfig。對于一次會話,只有一個HttpSession對象。然后,我們就有了會話遷移技術:

Web容器為了負載均衡,將HttpSession遷移到其它VM的技術。

和會話有關的接口如下所示:

HttpSessionListener –> SessionListener

類名 作用 實現類
HttpSessionListener 查看并發用戶 其它類
HttpSessionBindingListener 查看實現該接口的類被綁定到會話的情況 屬性類
HttpSessionAttributeListener 查看會話中屬性的增刪改情況 其它類
HttpSessionActivationListener 會話遷移到其它VM的情況 X

P.S. 和Session有關的事件監聽器只有 HttpSessionAttributeEvent和HttpSessionBindingEvent


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岳池县| 宜章县| 南充市| 垫江县| 苗栗县| 莫力| 若羌县| 黔南| 水富县| 新民市| 白河县| 新竹市| 承德县| 青冈县| 顺义区| 宽甸| 南昌市| 土默特右旗| 祥云县| 彭山县| 承德县| 仪陇县| 怀来县| 丽江市| 民乐县| 青浦区| 陆川县| 叶城县| 青州市| 宝山区| 成武县| 邵东县| 汨罗市| 霞浦县| 高唐县| 安泽县| 永川市| 和硕县| 扎鲁特旗| 怀集县| 民勤县|