二者作用:解決HTTP協(xié)議無狀態(tài)的缺陷,在客戶端/服務(wù)器端保存會話狀態(tài)厂抖。
創(chuàng)建Session過程:
- 檢查客戶端請求中是否包含一個session標(biāo)識(session id)
- 若包含灸眼,則說明之前已經(jīng)為此客戶端創(chuàng)建過session卧檐。服務(wù)器按照此session id檢索出session
- 若不包含,則為此客戶端創(chuàng)建一個session焰宣,并生成一個session id霉囚。此session id將作為響應(yīng)返回給客戶端保存。(使用Cookie保存)
若Cookie被禁止宛徊,必須有其他機(jī)制能夠把session id回傳給服務(wù)器
回傳session id至服務(wù)器:
- URL重寫:把session id直接附加在URL路徑后面
- 隱藏表單字段
Cookie和Session的區(qū)別:
- Cookie中只能保存ASCII字符串佛嬉,Session中可以保存任意類型的數(shù)據(jù),甚至Java Bean乃至任何Java類闸天、對象等
- 隱私策略不同。Cookie存儲在客戶端斜做,對客戶端是可見的苞氮,可被客戶端窺探、復(fù)制瓤逼、修改笼吟。而Session存儲在服務(wù)器上库物,不存在敏感信息泄露的風(fēng)險
- 有效期不同。Cookie的過期時間可以被設(shè)置很長贷帮。Session依賴于名為JSESSIONI的Cookie戚揭,其過期時間默認(rèn)為-1,只要關(guān)閉了瀏覽器窗口撵枢,該Session就會過期民晒,因此Session不能完成信息永久有效。如果Session的超時時間過長锄禽,服務(wù)器累計的Session就會越多潜必,越容易導(dǎo)致內(nèi)存溢出。
- 服務(wù)器壓力不同沃但。每個用戶都會產(chǎn)生一個session磁滚,如果并發(fā)訪問的用戶過多,就會產(chǎn)生非常多的session宵晚,耗費(fèi)大量的內(nèi)存垂攘。因此,諸如Google淤刃、Baidu這樣的網(wǎng)站搜贤,不太可能運(yùn)用Session來追蹤客戶會話。
- 瀏覽器支持不同钝凶。Cookie運(yùn)行在瀏覽器端仪芒,若瀏覽器不支持Cookie,需要運(yùn)用Session和URL地址重寫耕陷。
- 跨域支持不同掂名。Cookie支持跨域訪問(設(shè)置domain屬性實現(xiàn)跨子域),Session不支持跨域訪問
參考:理解Cookie和Session機(jī)制
更多文章請訪問我的博客:http://voidman.xyz