url中的jsessionid解釋做項(xiàng)目中學(xué)得 2010-01-25 14:59:39 閱讀58 評(píng)論0 字號(hào):大中小 訂閱 (1) 這是一個(gè)保險(xiǎn)措施 因?yàn)镾ession默認(rèn)是需要Cookie支持的 但有些客戶瀏覽器是關(guān)閉Cookie的 這個(gè)時(shí)候就需要在URL中指定服務(wù)器上的session標(biāo)識(shí),也就是5F4771183629C9834F8382E23BE13C4C 用一個(gè)方法(忘了方法的名字)處理URL串就可以得到這個(gè)東西 這個(gè)方法會(huì)判斷你的瀏覽器是否開啟了Cookie,如果他認(rèn)為應(yīng)該加他就會(huì)加上去 (2) 鏈接1:wapbrowse.jsp?curAlbumID=9 ,; 鏈接2:wapbrowse.jsp;jsessionid=5AC6268DD8D4D5D1FDF5D41E9F2FD960?curAlbumID=9,; 這兩個(gè)鏈接是從模擬器運(yùn)行時(shí)生成的source中拷貝過來的,兩個(gè)鏈接都是指向wapbrowse.jsp,鏈接1由于不包含jsessionid,所以在wapbrowse.jsp中變量為null,通過鏈接2打開wapbrowse.jsp可以正常訪問session 變量 (3) URL重寫功能,為了防止一些用戶把Cookie禁止而無法使用session而設(shè)置的功能.jsessionid后面的一長(zhǎng)串就是你服務(wù)器上的session的ID號(hào),這樣無需cookie也可以使用session. (4) http本身是無session的,,無法跟蹤客戶端的信息,,換句話說:http協(xié)議不管是誰聯(lián)接自己。 為了實(shí)現(xiàn)session,必須有瀏覽器支持,。瀏覽器可以用cookie存儲(chǔ)session,,這是最通用的做法。 但是,,如果我自己寫一個(gè)完全符合http協(xié)議的瀏覽器,,但是不配合服務(wù)器的session要求,那么服務(wù)器就無法產(chǎn)生session,。 好在現(xiàn)在的瀏覽器都支持session要求,,即使關(guān)閉了cookie,瀏覽器也會(huì)向服務(wù)器傳遞sessionid,,這個(gè)id是存儲(chǔ)在瀏覽器的內(nèi)存空間中的,,不保存在硬盤cookie中。 (5) sessionid是作為一個(gè)臨時(shí)cookie放在瀏覽器端的,。 session的具體信息放在服務(wù)器端,。 每次瀏覽器發(fā)出的請(qǐng)求,都會(huì)在http header里 帶上 sessionid來標(biāo)識(shí)自己,。 既然用Struts,,順便再把JSTL用上, 下面一個(gè)非常有用的標(biāo)簽: 清單 12. 操作的語法 var="name" scope="scope">
... URL 重寫是由 操作自動(dòng)執(zhí)行的,。如果 JSP 容器檢測(cè)到一個(gè)存儲(chǔ)用戶當(dāng)前會(huì)話標(biāo)識(shí)的 cookie,,那么就不必進(jìn)行重寫。但是,,如果不存在這樣的 cookie,,那么 生成的所有 URL 都會(huì)被重寫以編碼會(huì)話標(biāo)識(shí)。注:如果在隨后的請(qǐng)求中存在適當(dāng)?shù)?cookie,,那么 將停止重寫 URL 以包含該標(biāo)識(shí),。 參考:http://www-900.ibm.com/developerWorks/cn/java/j-jstl0318/index.shtml (6) 方法一:url中緊跟servlet/jsp文件名加;jsessionid=sessionId,,其中sessionId由HttpSession.getId()得到,,如http://localhost:8080/aaa/bbb.jsp;jsessionid=saldjfsdflsaeir234?para=1¶2=2 方法二:在application(ServletContext)里保存一個(gè)session管理器HashMap:sessionId---sessionRef,這樣可以在所有的servlet/jsp里調(diào)用,,這需要在url里將sessionId以參數(shù)形式傳遞,,如http://localhost:8080/aaa/bbb.jsp?sessionId=saldjfsdflsaeir234?para=1¶2=2,在服務(wù)器端用request.getParameter("sessionId")獲取 (7) session是在服務(wù)器端保存,。服務(wù)器根據(jù)url請(qǐng)求中的session_id來查找對(duì)應(yīng)的session,。 以一個(gè)bbs為例,網(wǎng)站需要根據(jù)每個(gè)請(qǐng)求url獲取用戶的信息,,如果以cookie方式,,用戶信息全部是存放在cookie中的,這樣可能會(huì)不安全;如果以session方式,,用戶信息可以存放在服務(wù)器端,,服務(wù)器只要從http請(qǐng)求中得到session_id,就可以得到存放在session中的用戶信息了,,這樣安全性比較高,。session在服務(wù)器中的表現(xiàn)方式依服務(wù)器而定,可能是寫到臨時(shí)文件中,,也可能直接放在內(nèi)存中,。 服務(wù)器從http請(qǐng)求中得到session_id的方式有兩種:cookie和url重寫。如果客戶端啟用cookie,,那么session_id可以保存在cookie中,;如果禁用cookie,就用url重寫方式,,在url中添加.jsessionid=xxxxx參數(shù)部分,,服務(wù)器會(huì)試圖從url中得到.jsessionid參數(shù)作為session_id. (8) cookie 是保存在客戶端的文本格式數(shù)據(jù),session是客戶端登錄到應(yīng)用,,由服務(wù)器為該客戶端建立的唯一的標(biāo)識(shí),,可以在session里面保存該客戶端的數(shù)據(jù)比如說用戶賬號(hào)。 一般cookie可以用來保存你的登錄賬號(hào)和密碼,,在你登錄到應(yīng)用服務(wù)上,,自動(dòng)添加到登錄界面或直接發(fā)送到服務(wù)器上進(jìn)行登錄,這就是你經(jīng)常能在論壇上看到的你的登錄信息保存一年的選項(xiàng) 的實(shí)現(xiàn)方式 (9) 在http的報(bào)文格式里面cookie和session是在同一個(gè)包文位置上的 如果ie發(fā)現(xiàn)包文里面包含cookie/session的信息的話,,他會(huì)根據(jù)安全級(jí)別來決定是否保存相關(guān)信息,,比如,如果安全機(jī)制允許使用cookie那么ie將把cookie的信息保存到臨時(shí)文件里面,,每次在請(qǐng)求服務(wù)器文件的時(shí)候會(huì)把收到的session的信息加入到請(qǐng)求的報(bào)文里面,,這就是session保存信息的原理。如果安全機(jī)制不允許使用cookie的話,,雖然ie收到了cookie和session的信息,,那么cookie的信息不會(huì)被寫入臨時(shí)文件,當(dāng)ie再次請(qǐng)求服務(wù)器文件的時(shí)候,,也不會(huì)把收到的session的信息加入到請(qǐng)求報(bào)文里面,,服務(wù)器就無法知道session的信息了。 |
|