Session學(xué)習(xí)
一.什么是session?
????當(dāng)訪問(wèn)服務(wù)器否個(gè)網(wǎng)頁(yè)的時(shí)候,會(huì)在服務(wù)器端的內(nèi)存里開(kāi)辟一塊內(nèi)存,這塊內(nèi)存就叫做session,而這個(gè)內(nèi)存是跟瀏覽器關(guān)聯(lián)在一起的。在計(jì)算機(jī)中,尤其是在網(wǎng)絡(luò)應(yīng)用中,Session稱為“會(huì)話控制”。
二.Session的作用? ??
? ? 在Session出現(xiàn)之前,為了解決多次多次Http請(qǐng)求的關(guān)聯(lián),如登錄一個(gè)界面,在發(fā)生跳轉(zhuǎn)時(shí)候,下一個(gè)界面也保持登錄狀態(tài),采用了Cookie,但Cookie保持在本地,不夠安全,且大小有限,因此,Session應(yīng)運(yùn)而生。
? ? 在Session不同于Cookie,它保存在了服務(wù)器內(nèi)存中。因?yàn)镠TTP是無(wú)關(guān)聯(lián)的,可能在同一時(shí)間有許多人同時(shí)訪問(wèn)同一個(gè)頁(yè)面,因此需要一個(gè)session_id來(lái)綁定一個(gè)用戶。當(dāng)一個(gè)用戶在同一個(gè)網(wǎng)頁(yè)中進(jìn)行操作的時(shí)候,它根據(jù)傳過(guò)來(lái)的信息生成session_id,并將其發(fā)送給客戶端,這里默認(rèn)瀏覽器支持使用cookie,客戶端將session_id保存在cookie中,并在下次訪問(wèn)的時(shí)候帶上session_id,這樣就可以在跳轉(zhuǎn)一個(gè)頁(yè)面的時(shí)候,了解上個(gè)界面的數(shù)據(jù),如上面所說(shuō)的登錄操作。
三.Session的應(yīng)用
? ? (注:本文具體描述在Java的web后端開(kāi)發(fā)的應(yīng)用)
? ? Session的創(chuàng)建流程
? ? ????1.首先在程序?yàn)槟硞€(gè)客戶端創(chuàng)建session時(shí)候,服務(wù)器首先檢測(cè)是否該請(qǐng)求里包含sessionid。
? ????? 2.若存在sessionId,表示已經(jīng)創(chuàng)建過(guò)session,那么通過(guò)id去檢索,但是因?yàn)閟ession會(huì)在一段時(shí)間未被訪問(wèn)時(shí)被刪除,有時(shí)候,會(huì)存在找不到session的情況,那么,在創(chuàng)建一個(gè)session。若請(qǐng)求中不包含sessionId,則創(chuàng)建一個(gè)與Session關(guān)聯(lián)的Sessionid,并傳給前端。
? ????? 3.前端將該session保存起來(lái),在下一次訪問(wèn)的時(shí)候,帶上上一步創(chuàng)建的sessionId(若該id未失效)則能夠訪問(wèn)與該id有關(guān)的session。
? ? Session在java中的使用
? ? ????1.session調(diào)用的常見(jiàn)函數(shù)
? ??????????isNew():是否是新的Session,一般在第一次訪問(wèn)的時(shí)候出現(xiàn)
????????????getid():拿到session,獲取ID
????????????getCreationTime():當(dāng)前session創(chuàng)建的時(shí)間
????????????getLastAccessedTime():最近的一次訪問(wèn)這個(gè)session的時(shí)間。
????????????getRrquestedSessionid: 跟隨上個(gè)網(wǎng)頁(yè)cookies或者URL傳過(guò)來(lái)的session
????????????isRequestedSessionIdFromCookie():是否通過(guò)Cookies傳過(guò)來(lái)的
????????????isRequestedSessionIdFromURL():是否通過(guò)重寫URL傳過(guò)來(lái)的
????????????isRequestedSessionIdValid():是不是有效的sessionID
? ? ????2.如何從session中取值
? ? ? ? ? ? session使用key-map形式來(lái)保存數(shù)據(jù)因此,采用session.setAttribute("token",token)來(lái)保存數(shù)據(jù),session.getAttribute("key")來(lái)獲取session中保存的數(shù)據(jù)。
? ??
? ??