這篇文章給大家分享的是有關(guān)jsp/servlet會話是什么意思的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
客戶端打開與服務(wù)器的連接,發(fā)出請求直到服務(wù)器響應(yīng)客戶端請求的全過程稱之為會話 。
瀏覽器與服務(wù)器之間的通信是通過HTTP協(xié)議進行通信的,而HTTP協(xié)議是”無狀態(tài)”的協(xié)議,它不能保存客戶的信息,即一次響應(yīng)完成之后連接就斷開了,下一次的請求需要重新連接,當(dāng)用戶在同一網(wǎng)站的多個頁面之間轉(zhuǎn)換時,根本無法確定是否是同一個客戶,會話跟蹤技術(shù)就可以實現(xiàn)這種要求 。
Cookie
服務(wù)器在響應(yīng)請求時可以將一些數(shù)據(jù)以"鍵-值"對的形式通過響應(yīng)信息保存在客戶端。當(dāng)瀏覽器再次訪問相同的應(yīng)用時,會將原先的存有session ID的Cookie通過請求信息帶到服務(wù)器端,網(wǎng)絡(luò)服務(wù)器通過識別唯一的session ID來代表每個客戶端,從而識別這個客戶端接下來的請求。
Cookie不是內(nèi)置對象,需要自己創(chuàng)建Cookie的實例。是服務(wù)器往客戶端寫的一段文本信息,該信息是可以修改的,所以一般情況cookie會存儲一些非敏感信息,當(dāng)客戶端再次請求服務(wù)器的時候,會將Cookie以請求頭的方式發(fā)送到服務(wù)器,這個時候服務(wù)器就能區(qū)分是誰在訪問了。
用于會話跟蹤的Cookie叫做會話Cookie。Servlet規(guī)范中會話跟蹤的cookie名字必須是JSESSIONID,保存在瀏覽器的內(nèi)存中。
Cookie可以用于保持用戶的會話狀態(tài),但Cookie信息保存在客戶端,存在較大的安全隱患,且一般瀏覽器對Cookie的數(shù)目及數(shù)據(jù)大小有嚴格的限制。在Web應(yīng)用中,一般情況下通過HttpSession對象保持會話狀態(tài)
Cookie cookie = new Cookie("鍵", "值"); //創(chuàng)建cookie cookie.setMaxAge(60*60*24); //設(shè)置cookie的有效期 cookie.setPath("/"); //設(shè)置cookie的有效范圍(路徑) response.addCookie(cookie); //將cookie寫入到客戶端
Session
Session 是存放在服務(wù)器端的,更加安全。每一個用戶都有一個不同的session,各個用戶之間是不能共享的。
Session是依賴Cookie的,如果Cookie被禁用,那么session也將失效 。
Session技術(shù)則是服務(wù)端的解決方案,它是通過服務(wù)器來保持狀態(tài)的。在Java中是通過調(diào)用HttpServletRequest的getSession方法(使用true作為參數(shù))創(chuàng)建的。在創(chuàng)建了Session的同時,服務(wù)器會為該Session生成唯一的Session id,而這個Session id在隨后的請求中會被用來重新獲得已經(jīng)創(chuàng)建的Session;在Session被創(chuàng)建之后,就可以調(diào)用Session相關(guān)的方法往Session中增加內(nèi)容了,而這些內(nèi)容只會保存在服務(wù)器中,發(fā)到客戶端的只有Session id;當(dāng)客戶端再次發(fā)送請求的時候,會將這個Session id帶上,服務(wù)器接受到請求之后就會依據(jù)Session id找到相應(yīng)的Session,從而再次使用之。正式這樣一個過程,用戶的狀態(tài)也就得以保持了。
session.setAttribute(String name,Object obj); //往session中存放內(nèi)容(通過鍵和值的形式) session.getAtrribute(String name); //通過鍵從session中獲取內(nèi)容 session.removeAttribute(String name); //把存儲在session中的對象移除 session.invalidate(); //銷毀session
隱藏表單域
隱藏表單域是將會話ID添加到HTML的隱藏表單中(類型為hidden的input)。重定向和轉(zhuǎn)發(fā)
通過<input type="hidden" name="">進行信息的傳遞 。通過表單形式提交到服務(wù)器,但是本身不顯示。
比如第二個表單中獲取第一個表單中的內(nèi)容,并以隱藏域( 文本框type為 hidden) 的方式接受第一個表單中的內(nèi)容,再次傳遞到第三個表單中。通俗點說請求的順序是這樣的:表單一 - - > 表單二 - - >表單三,但是表單三需要用到表單一提交的內(nèi)容,所以就會需要表單二作為過渡,把表單一的內(nèi)容以隱藏域的形式保存,然后再傳遞到表單三中。
重寫URL
把會話ID編碼在URL中。 例:counter.jjsp;jsessionnid=be8d697876787876befdbde898789098980這樣,即使瀏覽器不支持cookie,也能夠?qū)崿F(xiàn)會話跟蹤。
對于URL復(fù)寫,服務(wù)器從請求的URI中提取出會話ID,并把該請求與相應(yīng)的會話關(guān)聯(lián)起來,然后在訪問會話數(shù)據(jù)的時候,JSP頁面所進行的處理方式就和使用cookie跟蹤會話id時所使用的方式完全相同。所以sesssion的實現(xiàn)要依靠cookie或URL復(fù)寫技術(shù)。
String sessionId = request.getRequestedSessionId(); //獲得sessionId
通過response對象的encodeURL(StringURL)實現(xiàn)URL地值重寫:
<a href="<%=response.encodeURL("index.jsp") %>"> index頁面</a>
該方法會自動判斷客戶端是否支持Cookie。如果客戶端支持Cookie,會將URL原封不動地輸出來。如果客戶端不支持Cookie,則會調(diào)用encodeURL()方法之后會自動將用戶Session的id重寫到URL中。重寫后的輸出可能是這樣的:
a href="index.jsp?jsessionid=0E0C61100AEB06DE6A95EB1CD1DA8158">index頁面</a>
HttpServletResponse接口定義了兩個用于URL重寫的方法:
encodeURL方法,用于超鏈接和form表單的action屬性中設(shè)置的URL進行重寫
encodeRedirectURL 方法 用于對傳遞給HttpServletResponse.sendRedirect()方法的URL進行重寫
他們根據(jù)請求消息中是否含有Cookie頭字段來決定是否進行url重寫。把URL作為參數(shù)傳遞給這兩個方法,他們就能完成url重寫,在url后面添加 jsessionid參數(shù)及其值。可以關(guān)閉瀏覽器的Cookie,然后,進行實驗,在網(wǎng)頁源文件中查看URL后面是否有jsessionid參數(shù)及其值。
感謝各位的閱讀!關(guān)于jsp/servlet會話是什么意思就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
名稱欄目:jsp/servlet會話是什么意思-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://www.rwnh.cn/article44/dcpsee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、品牌網(wǎng)站設(shè)計、網(wǎng)站收錄、網(wǎng)站內(nèi)鏈、搜索引擎優(yōu)化、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容