更新時間:2021-01-07 16:44:33 來源:動力節(jié)點(diǎn) 瀏覽1288次
Session 是Spring家族中的一個子項(xiàng)目,它提供一組API和實(shí)現(xiàn),用于管理用戶的session信息,它把servlet容器實(shí)現(xiàn)的httpSession替換為spring-session,專注于解決 session管理問題,Session信息存儲在Redis中,可簡單快速且無縫的集成到我們的應(yīng)用中;
Session的創(chuàng)建
當(dāng)客戶端向服務(wù)器發(fā)送一個請求時,服務(wù)器首先檢查請求里是否包含SessionID,如果包含了SessionID則說明該客戶端已經(jīng)登錄過并且服務(wù)端為此客戶端創(chuàng)建了一個Session,服務(wù)器就依照SessionID將這個Session在服務(wù)器中找出來(如果找不到,就有可能為他新創(chuàng)建一個)。如果客戶端請求里不包含SessionID,則為該客戶新創(chuàng)建一個Session并生成一個與此Session相關(guān)的SessionID。這個SessionID是不重復(fù)的,唯一的,不容易找到規(guī)律的字符串。這個SessionID將在本次響應(yīng)中返回到客戶端保存。
Session是在服務(wù)端調(diào)用HttpServletRequest.getSession(true);這樣的語句時才被創(chuàng)建,如果JSP沒有顯式的使用page Session=”false”關(guān)閉Session,則JSP文件在編譯成Servlet時將會自動加上HttpServletRequest.getSession(true);這就是JSP內(nèi)置對象session的由來。
Session的存儲機(jī)制
一般情況下,Session都是存儲在內(nèi)存中,當(dāng)服務(wù)器進(jìn)程被停止或者重啟的時候,內(nèi)存里的Session也會被清空。如果設(shè)置了Session的持久化特性,服務(wù)器就會把Session保存到硬盤上,當(dāng)服務(wù)器進(jìn)程重新啟動后Session里的信息能夠被再次使用。
Session的存儲方式及各存儲方式下Session屬性值是否需要可序列化:
InProc(默認(rèn)):不需要序列化,存放在IIS進(jìn)程中(內(nèi)存),重啟IIS服務(wù)器時會話狀態(tài)消失。
SQLServer:需要序列化,存放在數(shù)據(jù)庫中,存儲在硬盤中。
StateServer:需要序列化,存放在Asp.Net狀態(tài)服務(wù)進(jìn)程中,重啟Web應(yīng)用時保留會話狀態(tài)。
Session的失效
Session在下列情況下失效:
程序調(diào)用HttpSession.invalidate();
距離上一次收到客戶端發(fā)送的SesionID時間間隔超過了Session的超時設(shè)置,tomcat默認(rèn)session超時時間為30分鐘;
服務(wù)器進(jìn)程被停止(非持久Session);
我們常說打開瀏覽器就創(chuàng)建了一個Session,關(guān)閉瀏覽器時Session也被刪除,事實(shí)上,除非程序通知服務(wù)器刪除Session,否則Session會被服務(wù)器一直保留,直到Session的失效時間到了自動刪除。服務(wù)器不知道瀏覽器被關(guān)閉,瀏覽器不會主動地在其關(guān)閉之前通知服務(wù)器它將要關(guān)閉。程序一般是在用戶注銷后刪除Session。我們產(chǎn)生這種錯覺地原因是:一般Session機(jī)制都使用cookie來保存SessionID,而一旦關(guān)閉瀏覽器,SessionID就不存在了,再連接服務(wù)器時找不到原來的Session了。如果cookie保存在硬盤中,或者用某種手段改寫瀏覽器發(fā)出的HTTP請求頭,把原來的SessionID發(fā)送給服務(wù)器,則再次打開瀏覽器仍然能夠找到原來的Session。
恰恰由于關(guān)閉瀏覽器時不會讓Session被刪除,迫使服務(wù)器為Session設(shè)置了一個失效時間。當(dāng)距離客戶端上一次使用Session的時間超過失效時間,服務(wù)器就認(rèn)為客戶端已經(jīng)停止了活動,才會把Session刪除以節(jié)省存儲空間。
零基礎(chǔ)學(xué)習(xí)Session,推薦動力節(jié)點(diǎn)的Session菜鳥教程,此課程詳細(xì)講解Spring session如何解決集群模式/分布式/跨域環(huán)境下,實(shí)現(xiàn)session的同步共享問題,是構(gòu)建大規(guī)模應(yīng)用必須要考慮的一個問題。
課程學(xué)習(xí)目錄
1.Session視頻教程:Session的基本用法
2.Session視頻教程:Session的工作原理
3.Session視頻教程:Session的失效
4.Session視頻教程:Cookie禁用后的Session
5.Session視頻教程:Cookie禁用后重定向跳轉(zhuǎn)時Session的跟蹤
6.Session視頻教程:Cookie禁用后非重定向跳轉(zhuǎn)時Session的跟蹤
7.Session視頻教程:三個域?qū)傩钥臻g的對比
8.Session視頻教程:Eclipse中的WorkingSets用法
以上就是對“Session視頻教程,入門實(shí)戰(zhàn)精講”的介紹,希望對大家有所幫助,還想學(xué)習(xí)更多關(guān)于Java的課程,可以關(guān)注動力節(jié)點(diǎn)官網(wǎng)Java視頻教程,免費(fèi)下載學(xué)習(xí)。
初級 202925
初級 203221
初級 202629
初級 203743