Session是什么意思?詳解Session的特點、工作原理及與Cookie的區(qū)別
一、Session是什么意思
session在計算機中,尤其是在網(wǎng)絡應用中,稱為"會話控制"。Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的Web頁之間跳轉(zhuǎn)時,存儲在Session對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。當用戶請求來自應用程序的 Web頁時,如果該用戶還沒有會話,則web服務器將自動創(chuàng)建一個 Session對象。當會話過期或被放棄后,服務器將終止該會話。Session 對象最常見的一個用法就是存儲用戶的首選項。例如,如果用戶指明不喜歡查看圖形,就可以將該信息存儲在Session對象中。注意會話狀態(tài)僅在支持Cookie的瀏覽器中保留。
其次,Session是一個英語單詞,意思有開會、會議等。
二、Session的工作原理
Session內(nèi)容保存在服務器端的,通常是保存在內(nèi)存中,當然也可以保存在文件、數(shù)據(jù)庫等等??蛻舳烁掌鞫送ㄟ^SessionId來關(guān)聯(lián),SessionId通常以cookie的形式存儲在客戶端。每次HTTP請求,SessionId都會隨著Cookie被傳遞到服務器端,這行就可以通過SessionId取到對應的信息,來判斷這個請求來自于哪個客戶端/用戶。
1、用戶第一次請求服務器時,服務器端會生成一個sessionid;
2、服務器端將生成的sessionid返回給客戶端,通過set-cookie;
3、客戶端收到sessionid會將它保存在cookie中,當客戶端再次訪問服務端時會帶上這個sessionid;
4、當服務端再次接收到來自客戶端的請求時,會先去檢查是否存在sessionid,不存在就新建一個sessionid重復1,2的流程,如果存在就去遍歷服務端的session文件,找到與這個sessionid相對應的文件,文件中的鍵值便是sessionid,值為當前用戶的一些信息;
5、此后的請求都會交換這個 Session ID,進行有狀態(tài)的會話。
Session的工作原理
三、Session的特點
1、session保存的位置是在服務端;
2、session一般來說要配合cookie使用,如果用戶瀏覽器禁用了cookie,那么只能使用URL重寫來實現(xiàn)session的存儲功能;
3、單純的使用session來存儲用戶回話信息,那么當用戶量較多時,session文件數(shù)量會很多,會存在session查詢慢的問題。
本質(zhì)上:session技術(shù)就是一種基于后端有別于數(shù)據(jù)庫的臨時存儲技術(shù)。
四、Session的生命周期
1、Session何時生效
Sessinon在用戶訪問第一次訪問服務器時創(chuàng)建,需要注意只有訪問JSP、Servlet等程序時才會創(chuàng)建Session,只訪問Html、IMAGE等靜態(tài)資源并不會創(chuàng)建Session,可調(diào)用request.getSession(true)強制生成Session。
2、Session使用過程
Session生成后,只要用戶繼續(xù)訪問,服務器就會更新Session的最后訪問時間,并維護該Session。用戶每訪問服務器一次,無論是否讀寫Session,服務器都認為該用戶的Session"活躍"了一次。
3、Session何時失效
服務器會把長時間沒有活動的Session從服務器內(nèi)存中清除,此時Session便失效。Tomcat中Session的默認失效時間為20分鐘。從session不活動的時候開始計算,如果session一直活動,session就總不會過期。從該Session未被訪問,開始計時;一旦Session被訪問,計時清零。關(guān)閉瀏覽器,session就會失效。
五、Session的性能瓶頸
通常情況下,如果你不明確的設置,大多數(shù)Web框架會把Session數(shù)據(jù)存放到內(nèi)存中。如果你的Web應用用戶量不大的話,這也不成問題。但如果你的用戶數(shù)比較大的話,就可能發(fā)生一個事情—內(nèi)存不夠用了。這很正常,內(nèi)存容量是非常寶貴的,假設每個用戶的Session數(shù)據(jù)是100K,1萬個用戶就會大概占用1G的存儲空間,如果你的Session數(shù)據(jù)清理機制也恰巧比較慢的話,內(nèi)存非常容易被占滿。這就需要你在設計比較大并發(fā)量的站點時,要考慮Session的存儲方式,比如把它們保存到硬盤文件系統(tǒng)中,或者數(shù)據(jù)庫中。所以你在開發(fā)一個Web應用的時候,如果你的用戶量很大,你需要有這個意識。另外Session放到內(nèi)存中還有一個弊端,如果你的Web服務器發(fā)生重啟,那么所有的Session狀態(tài)都會被情況,會在一定程度上影響用戶體驗。
六、Session和Cookie的區(qū)別
1、存儲位置不同
cookie的數(shù)據(jù)信息存放在客戶端瀏覽器上;session的數(shù)據(jù)信息存放在服務器上。
2、存儲容量不同
單個cookie保存的數(shù)據(jù)<=4KB,一個站點最多保存20個Cookie。對于session來說并沒有上限,但出于對服務器端的性能考慮,session內(nèi)不要存放過多的東西,并且設置session刪除機制。
3、存儲方式不同
cookie中只能保管ASCII字符串,并需要通過編碼方式存儲為Unicode字符或者二進制數(shù)據(jù)。session中能夠存儲任何類型的數(shù)據(jù),包括且不限于string,integer,list,map等。
4、隱私策略不同
cookie對客戶端是可見的,別有用心的人可以分析存放在本地的cookie并進行cookie欺騙,所以它是不安全的。session存儲在服務器上,對客戶端是透明對,不存在敏感信息泄漏的風險。
5、有效期上不同
開發(fā)可以通過設置cookie的屬性,達到使cookie長期有效的效果。session依賴于名為JSESSIONID的cookie,而cookie JSESSIONID的過期時間默認為-1,只需關(guān)閉窗口該session就會失效,因而session不能達到長期有效的效果。
6、服務器壓力不同
cookie保管在客戶端,不占用服務器資源。對于并發(fā)用戶十分多的網(wǎng)站,cookie是很好的選擇。session是保管在服務器端的,每個用戶都會產(chǎn)生一個session。假如并發(fā)訪問的用戶十分多,會產(chǎn)生十分多的session,耗費大量的內(nèi)存。
7、瀏覽器支持不同
假如客戶端瀏覽器不支持cookie:cookie是需要客戶端瀏覽器支持的,假如客戶端禁用了cookie,或者不支持cookie,則會話跟蹤會失效。關(guān)于WAP上的應用,常規(guī)的cookie就派不上用場了。運用session需要使用URL地址重寫的方式。一切用到session程序的URL都要進行URL地址重寫,否則session會話跟蹤還會失效。
假如客戶端支持cookie:cookie既能夠設為本瀏覽器窗口以及子窗口內(nèi)有效,也能夠設為一切窗口內(nèi)有效。
session只能在本窗口以及子窗口內(nèi)有效。
8、跨域支持上不同
cookie支持跨域名訪問;session不支持跨域名訪問。
七、Session注意事項
1、Session中保存的數(shù)據(jù)的大小要考慮到存儲上線不論是內(nèi)存還是數(shù)據(jù)庫;
2、Session中不要存儲不可恢復的內(nèi)容;
3、依賴Session的關(guān)鍵業(yè)務一定要確??蛻舳碎_啟了Cookie;
4、注意Session的過期時間;
5、在負載均衡的情況下,由于存在Web服務器內(nèi)存中的Session無法共享,通常需要重寫Session的實現(xiàn)。
6、每個用戶都會有一個獨立的Session。如果Session內(nèi)容過于復雜,當大量客戶訪問服務器時可能會導致內(nèi)存溢出。因此,Session里的信息應該盡量精簡;
八、Session常見問題
1、為什么要使用session
Session對象是一種會話對象,用來記錄每個客戶端的訪問狀態(tài),其實,HTTP協(xié)議是一種無狀態(tài)協(xié)議,也就是客戶端向服務器發(fā)送一個請求request,然后服務器返回一個相應response,之后這個連接就會被關(guān)閉,兩者也沒有任何關(guān)系了,也就是服務器中不會存儲此次請求的有關(guān)信息,再次請求時服務器就無法知道這次請求和上次請求是否是一個客戶了。所以就需要采用會話session來記錄這次連接的信息了。
2、Session為什么會丟失
Session內(nèi)容的丟失都是有原因的,通常都是由于Web服務器的重啟造成的,比如IIS、Tomcat的重啟。
3、使session失效的方法都有什么
關(guān)閉tomcat;重啟web應用;session時間到;無效的session。
4、session的主要作用是什么
存儲會話信息供瀏覽器后續(xù)請求使用,可以獲取并修改變量的值。和cookie一起使用識別同一個客戶。
總結(jié)
優(yōu)化猩SEO:Session是用來標識用戶的,用戶請求什么資源,服務器就會把資源給該請求所帶的Sessionid對應的用戶,Session可以做登錄、訪問控制,數(shù)據(jù)傳遞,用戶識別等。
參考鏈接:
session(計算機術(shù)語)_百度百科
https://baike.baidu.com/item/session/479100
session的工作原理 - 莫等、閑 - 博客園
https://www.cnblogs.com/jxxblogs/p/12071196.html
修改于2023-07-19
想了解更多建站百科的內(nèi)容,請訪問:建站百科