會(huì)話跟蹤用來(lái)跟蹤用戶的整個(gè)會(huì)話,常用的是Session和Cookie。Cookie通過(guò)客戶端記錄信息確定用戶身份,Session通過(guò)在服務(wù)器端記錄信息確定用戶身份。
1.Cookie
1.1概念及使用方法
Cookie實(shí)際上是一小段文本信息。客戶端請(qǐng)求服務(wù)器,如果服務(wù)器需要記錄該用戶狀態(tài),就使用response向客戶端瀏覽器頒發(fā)一個(gè)Cookie。客戶端瀏覽器會(huì)把Cookie保存起來(lái),當(dāng)瀏覽器再請(qǐng)求該網(wǎng)站時(shí),把請(qǐng)求的網(wǎng)址連同該Cookie一同交給服務(wù)器。服務(wù)器檢查該Cookie,以此來(lái)辨認(rèn)用戶狀態(tài)。服務(wù)器還可以根據(jù)需要修改Cookie的內(nèi)容。
java中把Cookie封裝成了javax.servlet.http.Cookie類。每個(gè)Cookie都是該Cookie類的對(duì)象。服務(wù)器通過(guò)操作Coolkie類對(duì)象對(duì)客戶端Cookie進(jìn)行操作。通過(guò)request.getCookie()獲取客戶端提交的所有Cookie(Cookie[]),通過(guò)response.addCookie(Cookie cookie)向客戶端設(shè)置Cookie。
Cookie對(duì)象使用key-value屬性對(duì)的形式保存用戶狀態(tài),一個(gè)Cookie對(duì)象保存一個(gè)屬性對(duì),一個(gè)request或者response同時(shí)使用多個(gè)Cookie。因?yàn)镃ookie類位于包javax.servlet.http.*下面,所以jsp中不需要import該類。
1.2不可跨域名性
根據(jù)域名的不同,網(wǎng)站只能操作自己的Cookie,這是由客戶端瀏覽器決定的。
1.3Unicode編碼:保存中文
使用時(shí)可以用如下語(yǔ)句生成Cookie 及從Cookie中取值
Cookie cookie = new Cookie(URLEncoder.encode("姓名","UTF-8"));String cookieName=URLDecoder.decode(cokie.getName()),"UTF-8";1.4BASE64編碼:保存二進(jìn)制圖片
//inbyte binary;//輸入流輸入圖片String content = BASE64Encoder.class.newInstance().encode(binary);Cookie cookie=new Cookie("file", content);//outbyte[] binary=BASE64Decoder.class.newInstance().decodeBuffer(cookie.getValue(),.replace(" ",""));response.getOutputStream().write(binary);1.5Cookie的所有屬性

1.6Cookie的有效期
Cookie的maxAge決定著Cookie的有效期,單位為妙。Cookie中通過(guò)getMaxAge()方法與setMaxAge(int maxAge)方法來(lái)讀寫(xiě)maxAge屬性。
如果maxAge屬性為正數(shù),則表示該Cookie會(huì)在maxAge秒之后自動(dòng)失效。瀏覽器會(huì)將其寫(xiě)到對(duì)應(yīng)的Cookie文件中,下面的Cookie信息將永遠(yuǎn)有效。
cookie.setMaxAge(Integer.MAX_VALUE);
如果maxAge為負(fù)數(shù),則表示該Cookie僅在本瀏覽器窗口以及本窗口打開(kāi)的子窗口內(nèi)有效,關(guān)閉窗口后該Cookie失效。不會(huì)被寫(xiě)入Cookie文件中。
1.7刪除和修改
如果maxAge為0,則表示刪除該Cookie。
response對(duì)象提供的Cookie操作方法只有一個(gè)添加操作add,要想修改Cookie只能使用一個(gè)同名的Cookie來(lái)覆蓋原來(lái)的Cookie。
1.8Cookie的域名
同一一級(jí)域名下的二級(jí)域名不可交互使用Cookie,如果想二級(jí)域名下都可以使用該Cookie,需要設(shè)置Cookie的domain參數(shù)
1.9Cookie的路徑
path屬性決定允許訪問(wèn)Cookie的路徑,path屬性需要使用符號(hào)“/”結(jié)尾。
1.10JavaScr 設(shè)置Cookie可以直接賦值 document.cookie = name + "=" + emcodeURI(value); 2.Session 2.1概念及使用方法 客戶端瀏覽器訪問(wèn)服務(wù)器的時(shí)候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上,客戶端瀏覽器再次訪問(wèn)時(shí)只需要從該Session中查找該客戶的狀態(tài)就可以。對(duì)應(yīng)的類為javax.servlet.http.HttpSession。每個(gè)來(lái)訪者對(duì)應(yīng)一個(gè)Session對(duì)象,所有該客戶的狀態(tài)信息都保存在這個(gè)Session對(duì)象里。在客戶端第一次請(qǐng)求服務(wù)器時(shí)創(chuàng)建。 Servlet中必須使用request來(lái)編程式獲取HttpSession對(duì)象,而JSP中內(nèi)置了Session隱藏對(duì)象,可以直接使用。 request.getSession()方法獲取Session,使用getAttribute(String key)和setAttribute(String key, Object value)方法來(lái)讀寫(xiě)客戶狀態(tài)信息。 2.2Session的生命周期 Session保存在服務(wù)器內(nèi)存中,每個(gè)用戶都會(huì)有一個(gè)獨(dú)立的Session,因此Session里的信息應(yīng)該盡量精簡(jiǎn)。Session生成后,只要用戶繼續(xù)訪問(wèn),服務(wù)器就會(huì)更新Session的最后訪問(wèn)時(shí)間,并維護(hù)該Session。服務(wù)器會(huì)把長(zhǎng)時(shí)間沒(méi)有活躍的Session從內(nèi)存刪除,Session就自動(dòng)失效。Session的超時(shí)時(shí)間為maxInactiveInterval屬性,可以通過(guò)getMaxInativeInterval()獲取,通過(guò)setMaxInactiveInterval(long interval)修改。Session的超時(shí)時(shí)間也可以在web.xml文件中修改,另外通過(guò)invalidate()方法可以使Session失效。 2.3Session的常用方法 2.4Session與瀏覽器 Http協(xié)議是無(wú)狀態(tài)的,Session不能依據(jù)Http連接來(lái)判斷是否是同一客戶,因此服務(wù)器向客戶端瀏覽器發(fā)送一個(gè)名為JSESSIONID的Cookie,它的值為該Session的id,Session依據(jù)該Cookie來(lái)識(shí)別是否為同一用戶。該Cookie為服務(wù)器自動(dòng)生成的,它的maxAge屬性一般為-1。同一機(jī)器的兩個(gè)瀏覽器會(huì)生成兩個(gè)不同的Session,但是由瀏覽器窗口內(nèi)的鏈接、腳本等打開(kāi)新窗口除外。這類子窗口會(huì)共享父窗口的Cookie,因此會(huì)共享一個(gè)Session。 如果瀏覽器禁用Cookie或者不支持Cookie,就需要用到URL地址重寫(xiě)。 URL地址重寫(xiě)是對(duì)客戶端不支持Cookie的解決方案。URL地址重寫(xiě)的原理是將該用戶Session的id信息重寫(xiě)到URL地址中。服務(wù)器能夠解析重寫(xiě)后的URL獲取Session的ID。 3.Cookie與Session區(qū)別 Cookie只能保存ASCII字符串,如果需要存取Unicode字符或者二進(jìn)制數(shù)據(jù),需要進(jìn)行UTF-8,GBK或者BASE64等方式編碼。Cookie也不能直接存取Java對(duì)象。Session可以存取任何類型的數(shù)據(jù)。 Session不存在敏感信息泄露的危險(xiǎn),如果選用Cookie,敏感信息盡量不要寫(xiě)到Cookie中。 Cookie可以永久有效,Session不能實(shí)現(xiàn)。 并發(fā)瀏覽的用戶非常多時(shí),最好使用Cookie。 對(duì)于WAP應(yīng)用, Session+URL地址重寫(xiě)。 Cookie通過(guò)設(shè)置domain屬性,可以實(shí)現(xiàn)跨域名(二級(jí)域名),Session則不會(huì)支持跨域名。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注