大家好,我是IT修真院北京分院第二十六期的學(xué)員李寧虎减俏,一枚正直純潔善良的JAVA程序員 今天給大家分享一下,什么是cookie碱工,什么是session娃承,分別用作什么場景
一、背景介紹
為什么要使用cookie和session? 很多時候客戶端和服務(wù)器進行交互使用了HTTP協(xié)議怕篷,但是HTTP協(xié)議是無狀態(tài)的历筝;HTTP協(xié)議的請求過程,是基于 TCP/IP 的廊谓,當客戶端請求服務(wù)器梳猪,服務(wù)器處理后,進行響應(yīng)蒸痹,該過程是無狀態(tài)的春弥。
但是在有些時候是需要保存一些客戶端的請求信息呛哟,識別客戶端的某些狀態(tài),智能的匿沛、有針對性的去分析某些客戶端的習(xí)慣扫责。這些時候,就需要去記錄客戶端的連接狀態(tài)逃呼,識別請求的狀態(tài)等公给。所以為了解決類似的事情,就需要使用到了 Cookie 和 Session蜘渣。
比如,使用Cookie的場景:有些網(wǎng)站有記住用戶名的功能肺然,當你勾這個的時候蔫缸,下次進入該網(wǎng)站時,就會保存上一次登錄的用戶名际起;使用Seesion的場景:利用Seesion來驗證用戶是否已登錄拾碌,利用Session來保存驗證碼。
二街望、知識剖析
Cookie:在客戶端訪問某個地址時校翔,會將請求交到服務(wù)器進行處理,在發(fā)送請求的時候灾前,瀏覽器會將頁面的頭部信息一并的交到服務(wù)器端進行處理防症。在處理的過程中,Cookie 在服務(wù)器端生成 哎甲,在此同時蔫敲,可以將一些需要保存的信息,存放到此 Cookie 中炭玫。生成 Cookie 對象時奈嘿,需要確定具體的名稱及具體的值,可以設(shè)置當前 Cookie 的過期時間吞加,設(shè)置過期時間后裙犹,就相當于持久化了 Cookie 中的數(shù)據(jù),此時的 Cookie 會以之前的 Cookie 名稱衔憨,保存在客戶端叶圃。
如果不設(shè)置過期時間,則當前 Cookie 的生命期是瀏覽器會話期間巫财,一旦關(guān)閉了該瀏覽器盗似,當前的Cookie 就會不存在了,此時的 Cookie 信息是保存在內(nèi)存中平项。在服務(wù)器端赫舒,處理完后悍及,會將生成的 Cookie ,隨著 Http 響應(yīng)接癌,會在 Http 響應(yīng)頭中心赶,加上Cookie 信息,瀏覽器接受到響應(yīng)后缺猛,會按照 Http 響應(yīng)頭里的 Cookie 缨叫,在客戶端建立 Cookie 。在下次客戶進行請求的時候荔燎,Http 會附帶著已經(jīng)存儲過的 Cookie耻姥,一并發(fā)送到服務(wù)器。一個域有咨,在客戶端建立的所以 Cookie 都是可以共享的琐簇,只要 Cookie 沒有過期。
Session:Session 是在服務(wù)器端生成的座享,存儲在服務(wù)器端婉商,即存在內(nèi)存中≡眩可以對生成的 Session 設(shè)置過期時間丈秩,如果不設(shè)置過期時間,默認的 Session 過期時間是30 分鐘(在不同的服務(wù)器中淳衙,它的過期時間略有不同蘑秽,本文是以 Tomcat 來說的) 但是,Sesssion 的生成的同時箫攀,會生成一個與之相關(guān)聯(lián)的的 SessionID 筷狼,此 SessionID的存儲是需要 Cookie 來完成的。 SessionID 是以名稱為 JSESSIONID匠童,其值應(yīng)該是一個既不會重復(fù)埂材,又不容易被找到規(guī)律以仿造的字符串。SessionID會隨著此次 Http 響應(yīng)汤求,一并返回到客戶端俏险,并保存在客戶端中。到當前請求再次發(fā)出后扬绪,該 SessionID會隨著 Http 頭部竖独,傳到服務(wù)器中,服務(wù)器依據(jù)當前 SessionID 得到與之對應(yīng)的 Session.
三挤牛、常見問題
有的網(wǎng)站禁用cookie之后莹痢,session不能用。
四、解決方案
如果客戶端禁用了 Cookie 的話竞膳,很多網(wǎng)站任然可以存儲用戶的信息航瞭。一種處理的方式是URL 重寫,將 SesseionID 直接附加在請求地址的后面坦辟。另一種處理的方式是刊侯,使用隱藏自動的方式。就是服務(wù)器自動的在表單中锉走,添加一個隱藏字段滨彻,以便在表單提交時,將 SesseionID 一起傳到服務(wù)器挪蹭,進行識別亭饵。
五、編碼實戰(zhàn)
六梁厉、拓展思考
session與cookie的區(qū)別冬骚,與使用場景
1、cookie數(shù)據(jù)存放在客戶的瀏覽器上懂算,session數(shù)據(jù)放在服務(wù)器上。
2庇麦、cookie不是很安全计技,別人可以分析存放在本地的cookie并進行cookie欺騙,考慮到安全應(yīng)當使用session山橄。
3垮媒、session會在一定時間內(nèi)保存在服務(wù)器上。當訪問增多航棱,會比較占用你服務(wù)器的性能睡雇,考慮到減輕服務(wù)器性能方面,應(yīng)當使用cookie饮醇。
4它抱、單個cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie朴艰。
5观蓄、可以考慮將登陸信息等重要信息存放為session,其他信息如果需要保留祠墅,可以放在cookie中侮穿。
--------------------------------------------------------------------------------------------------------------------
“我們相信人人都可以成為一個工程師,現(xiàn)在開始毁嗦,找個師兄亲茅,帶你入門,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷每寺啵”茵肃。
這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學(xué)習(xí)路線娶耍,學(xué)習(xí)透明化免姿,成長可見化,師兄1對1免費指導(dǎo)榕酒∨卟玻快來與我一起學(xué)習(xí)吧 !