33、JAVA_WEB开发基础之会话机制
會(huì)話(huà)是什么
一個(gè)客戶(hù)端瀏覽器與web服務(wù)器之間連續(xù)發(fā)生的一系列請(qǐng)求和響應(yīng)過(guò)程就是會(huì)話(huà),這些過(guò)程中產(chǎn)生的一系列信息就是會(huì)話(huà)信息,會(huì)話(huà)機(jī)制就是用于維護(hù)這些信息一致性的一種技術(shù)。通俗的說(shuō)就是,一個(gè)A賬號(hào)訪(fǎng)問(wèn)服務(wù)器,進(jìn)行多次交互產(chǎn)生了一些信息,對(duì)于無(wú)狀態(tài)Http協(xié)議來(lái)說(shuō),每來(lái)一次請(qǐng)求他都會(huì)處理一次,認(rèn)為是一次新客戶(hù)端的請(qǐng)求,所以他沒(méi)有辦法維護(hù)這些信息的一致性,所以便出現(xiàn)了會(huì)話(huà)這一概念,有了會(huì)話(huà)技術(shù),就可以記錄下A與服務(wù)器交互產(chǎn)生的信息。
如何實(shí)現(xiàn)
現(xiàn)在基本都是HTTP協(xié)議,而HTTP協(xié)議是沒(méi)有狀態(tài)的,所以無(wú)法記錄多個(gè)請(qǐng)求下的一系列信息,所以就需要借助一些技術(shù)來(lái)維護(hù)服務(wù)器和瀏覽器之間的會(huì)話(huà)信息,這里有兩種技術(shù),分別是:Cookie和Session。
Cookie會(huì)話(huà)技術(shù)
cookie采用在客戶(hù)端保持http狀態(tài)信息的方案,通過(guò)將狀態(tài)信息保存在客戶(hù)端來(lái)保持會(huì)話(huà)狀態(tài)。cookie是瀏覽器訪(fǎng)問(wèn)web服務(wù)器的某個(gè)資源時(shí),由web服務(wù)器在http響應(yīng)消息頭中附帶傳送給瀏覽器的小文本文件。當(dāng)發(fā)生交互時(shí),web服務(wù)器通過(guò)在http相應(yīng)消息中增加Set-Cookie響應(yīng)頭字段將Cookie信息發(fā)送給瀏覽器,瀏覽器則通過(guò)在http請(qǐng)求消息中增加Cookie請(qǐng)求頭字段將Cookie回傳給web服務(wù)器,使用cookie頭字段來(lái)確認(rèn)交互屬于同一會(huì)話(huà)過(guò)程。
cookie的工作過(guò)程圖示如下:
客戶(hù)端一方會(huì)將cookie信息如何存儲(chǔ)呢?這里說(shuō)一下,cookie信息可以被存儲(chǔ)在瀏覽器內(nèi)存中,當(dāng)關(guān)閉瀏覽器時(shí),cookie就失效,這就是會(huì)話(huà)cookie;也可以通過(guò)設(shè)置將cookie信息存放在客戶(hù)端主機(jī)的磁盤(pán)中,這就是持久化cookie。
cookie保持會(huì)話(huà)狀態(tài)工作原理代碼體現(xiàn)如下:
// 獲取客戶(hù)端的cookie Cookie[] cookies = request.getCookies(); // 如果有cookie if (cookies != null && cookies.length > 0) {for (Cookie c : cookies) {//獲取cookie名String name = c.getName();//獲取cookie值String value = c.getValue();if ("cookie_id_one".equals(name) && "123456".equals(value)) {//可以保持會(huì)話(huà)}} }else{//客戶(hù)端還沒(méi)有cookie值,傳回一個(gè)// 將cookie由服務(wù)器返回給客戶(hù)端Cookie cookie = new Cookie("cookie_id_one", "123456");// 設(shè)置最大失效是時(shí)間是3600秒 ,若為負(fù)數(shù)則表示不存儲(chǔ)這個(gè)cookiecookie.setMaxAge(3600);response.addCookie(cookie); }Session會(huì)話(huà)技術(shù)
session采用在服務(wù)器端保持http狀態(tài)信息的方案,通過(guò)將狀態(tài)信息保存在服務(wù)器端來(lái)保持會(huì)話(huà)狀態(tài)。其工作原理大致為:服務(wù)器檢查客戶(hù)端傳來(lái)的請(qǐng)求中是否包含一個(gè)sessio標(biāo)識(shí),如果已經(jīng)包含,服務(wù)器就按照此sessioid檢索出此用戶(hù)信息,如果請(qǐng)求中不包含sessionid,服務(wù)器則創(chuàng)建一個(gè)sessionid并發(fā)送給客戶(hù)端保存,使用JSESSIONID來(lái)表示。
session的工作原理圖如下所示:
說(shuō)一個(gè)概念,session cookie,他和上邊的cookie不同,他指的是sessionid在客戶(hù)端保存時(shí)的一個(gè)參數(shù)標(biāo)記,服務(wù)器傳送sessionid到客戶(hù)端時(shí),會(huì)創(chuàng)建一個(gè)JSESSIONID,它的值就是sessionid,JSESSIONID存儲(chǔ)在session cookie中,session cookie存在于瀏覽器的內(nèi)存中,所以當(dāng)瀏覽器關(guān)閉時(shí),session cookie就消失了,而服務(wù)器端的session對(duì)象不會(huì)消失。
java中使用HttpSession來(lái)表示session會(huì)話(huà),他的基本方法如下:
//使用請(qǐng)求對(duì)象創(chuàng)建會(huì)話(huà)對(duì)象 HttpSession session = request.getSession(); //獲取到sessionId String sessionId = session.getId(); if (sessionId != null && sessionId != "") {//設(shè)置超時(shí)時(shí)間session.setMaxInactiveInterval(6000);//可以直接銷(xiāo)毀此sessionid以結(jié)束此次會(huì)話(huà)session.invalidate();//獲取sessionIDsession.getId();//等等 }?
總結(jié)
以上是生活随笔為你收集整理的33、JAVA_WEB开发基础之会话机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 投影仪怎么调对比度 有什么步骤
- 下一篇: 7月15是什么节日 7月15简单介绍