1崔拥、Cookie
Cookie是客戶端技術(shù),保存在客戶端涵亏。
1.1、Cookie的有效期
Cookie的maxAge決定著Cookie的有效期蒲凶,單位為秒(Second)气筋,如果maxAge屬性為正數(shù),則表示該Cookie會在maxAge秒之后自動失效豹爹。瀏覽器會將maxAge為正數(shù)的Cookie持久化裆悄。
如果maxAge為負數(shù),則表示該Cookie僅在本瀏覽器窗口以及本窗口打開的子窗口內(nèi)有效臂聋,關(guān)閉窗口后該Cookie即失效光稼。maxAge為負數(shù)的Cookie,為臨時性Cookie孩等,不會被持久化艾君,不會被寫到Cookie文件中。Cookie信息保存在瀏覽器內(nèi)存中肄方,因此關(guān)閉瀏覽器該Cookie就消失了冰垄。Cookie默認的maxAge值為–1。
如果maxAge為0权她,則表示刪除該Cookie虹茶。Cookie機制沒有提供刪除Cookie的方法逝薪,因此通過設(shè)置該Cookie即時失效實現(xiàn)刪除Cookie的效果。失效的Cookie會被瀏覽器從Cookie文件或者內(nèi)存中刪除蝴罪,
如果maxAge為Integer.MAX_VALUE,則標示永久有效
Cookie cookie = new Cookie("key", "value");
cookie.setMaxAge(Integer.MAX_VALUE); //永久有效
//cookie.setMaxAge(0); // 設(shè)置生命周期為0 刪除
response.addCookie(cookie); // 必須執(zhí)行這一句
1.2董济、Cookie的域名和訪問路徑
Cookie cookie = new Cookie("time","20080808"); // 新建Cookie
cookie.setDomain(".helloweenvsfei.com"); // 設(shè)置域名 以.helloweenvsfei.com結(jié)尾的域名都可以訪問
cookie.setPath("/path/"); // 設(shè)置路徑 包含/path/的路徑可以獲取cookie
//cookie.setPath("/"); //都可以訪問
//cookie.setSecure(true); // 設(shè)置安全屬性 瀏覽器只會在HTTPS和SSL等安全協(xié)議中傳輸此類Cookie
cookie.setMaxAge(Integer.MAX_VALUE); // 設(shè)置有效期
response.addCookie(cookie); // 輸出到客戶端
domain屬性決定運行訪問Cookie的域名,而path屬性決定允許訪問Cookie的路徑
2要门、Session
Session是服務(wù)器端技術(shù)虏肾。
2.1 session的創(chuàng)建時間
一般認為session的創(chuàng)建是在打開瀏覽器輸入地址,回車的時候就創(chuàng)建了session欢搜。經(jīng)過測試封豪,其實不然。
session的創(chuàng)建需要在服務(wù)端調(diào)用了HttpServletRequest.getSession()方法時炒瘟,才會被創(chuàng)建吹埠。
2.2、session的實現(xiàn)原理
服務(wù)器會為每一個訪問服務(wù)器的用戶創(chuàng)建一個session對象唧领,并且把session對象的id保存在本地cookie上藻雌,只要用戶再次訪問服務(wù)器時,帶著session的id斩个,服務(wù)器就會匹配用戶在服務(wù)器上的session,根據(jù)session中的數(shù)據(jù)驯杜。
session依賴cookie受啥,如果瀏覽器禁用了cookie,就需要用到URL重寫了鸽心,這種方法讓服務(wù)器收到的每個請求中都帶有sessioinId滚局。
1、鏈接
<a href='/jsp/index.jsp;jsessionid=<%=session.getId() %>' >主頁</a>
或者
<a href='<%=response.encodeURL("/jsp/index.jsp") %>' >主頁</a>
2顽频、 form
<form action='/jsp/index.jsp;jsessionid=<%=session.getId() %>' method="post">
<input type="submit" value="提交"/>
</form>
或者
<form action='<%=response.encodeURL("/jsp/index.jsp") %>' method="post">
<input type="submit" value="提交"/>
</form>
使用response.encodeURL()更加“智能”藤肢,它會判斷客戶端瀏覽器是否禁用了Cookie,如果禁用了糯景,那么這個方法在URL后面追加jsessionid嘁圈,否則不會追加
2.3、 session的有效時長
服務(wù)器會把長時間沒有活動的Session從服務(wù)器內(nèi)存中清除蟀淮,此時Session便失效最住。具體根據(jù)服務(wù)器設(shè)置,一般在二三十分鐘左右