一、cookie是什么
cookie就是服務(wù)器發(fā)給客戶端的信息,這些信息以文本文件的方式儲存在諸如瀏覽器等的客戶端里蚀浆。然后,如果客戶端再向相同域名的服務(wù)端發(fā)送請求的時候搜吧,就會帶上這些信息市俊。從服務(wù)端發(fā)送過來的cookie會出現(xiàn)在http的響應(yīng)頭中(response header),而當(dāng)客戶端再次向相同域名發(fā)送http請求的時候滤奈,cookie會出現(xiàn)在請求頭中摆昧。
cookie經(jīng)常用來存放用戶的身份、密碼等信息蜒程,最常見的cookie使用場景就是:在登陸界面绅你,有一個“是否記住我”的選項,當(dāng)勾選以后每戶發(fā)送請求都會帶上cookie來驗證用戶身份昭躺,這樣用戶就避免了重復(fù)輸入用戶名和密碼了忌锯。
對于設(shè)置cookie,不同的語言有不同的方法领炫,甚至還有一些專門的插件偶垮。當(dāng)在一個域名下設(shè)置了cookie,之后針對這個域名和路徑下所有的請求都會帶上cookie。
關(guān)于cookie的過期時間:cookie的過期時間在與cookie的值一同設(shè)定的似舵,它指定了cookie什么時候不再被發(fā)送至服務(wù)器脚猾,而后瀏覽器/服務(wù)端會刪除該cookie。如果不設(shè)置的話砚哗,那么cookie只存在于當(dāng)前會話當(dāng)中龙助,瀏覽器一旦關(guān)閉,該cookie就會被刪除蛛芥。P.S 但是chrome做了優(yōu)化泌参,在你關(guān)閉以后一點時間它依然不會失效。
關(guān)于cookie的域名和路徑:域名(domain)選項決定了cookie被發(fā)送到哪個域名下常空,默認(rèn)情況下是與創(chuàng)建cookie相同的域名沽一;路徑(path)的作用與域名選項相同,也是指定了特定的路徑漓糙,才會在請求頭中附加cookie信息铣缠。
登陸界面是否記住我的邏輯:當(dāng)用戶輸入完用戶名和密碼以后,并且還勾選記住我的情況下昆禽,這些信息發(fā)送到服務(wù)端蝗蛙,在服務(wù)端完成用戶驗證以后,服務(wù)端會在setCookie里做一個不用重復(fù)輸入密碼的標(biāo)記醉鳖,然后發(fā)送給客戶端捡硅,用戶下次再登陸的時候,在這個域名和路徑下盗棵,這些cookie會再次發(fā)送到服務(wù)端壮韭,服務(wù)端從cookie里讀取了之前的標(biāo)記,就不會讓用戶再次輸入用戶名和密碼纹因,而是直接跳轉(zhuǎn)了喷屋。當(dāng)然,這個cookie的標(biāo)記是有時間限制的瞭恰,一旦超過了屯曹,這個標(biāo)記就會被瀏覽器刪除。
總結(jié):一般cookie交互過程如下:
1惊畏、客戶端發(fā)送一個http請求給服務(wù)端
2恶耽、服務(wù)端發(fā)送一個http響應(yīng)給客戶端,在響應(yīng)頭中內(nèi)嵌了cookie
3颜启、在相同域名和相同路徑下偷俭,客戶端發(fā)送一個請求到服務(wù)端,在請求頭中帶上了cookie
4农曲、服務(wù)端發(fā)回一個http響應(yīng)給客戶端
二社搅、session是什么驻债?
session的主要用處和cookie一樣乳规,都是用來記錄用戶的身份信息形葬。不同的地方在于,cookie是儲存在客戶端暮的,而session是儲存在服務(wù)端笙以。
因為cookie是儲存在客戶端,這就引發(fā)了一個安全問題:所有儲存在客戶端的東西都可以通過某種方式進行人為修改冻辩。而session則解決了這一問題猖腕,因為它儲存在服務(wù)器上。
session的使用邏輯:服務(wù)器先給每一個發(fā)送過來http請求的瀏覽器一個id恨闪,當(dāng)然倘感,這個id是加密過的;這個id會儲存在瀏覽器的cookie中咙咽,所以以后瀏覽器發(fā)送請求的時候都會帶上這個cookie中的id老玛。與此同時,服務(wù)器給每個用戶給了一個session钧敞,當(dāng)服務(wù)器驗證通過了用戶的身份信息蜡豹,就會用session[id]在session中做一個標(biāo)記,這樣下次用戶再在相同域名/路徑請求時溉苛,服務(wù)器在讀取到id并在session中找到了標(biāo)記的話镜廉,用戶就不用再次輸入用戶名和密碼了。
三愚战、Cookie and Session區(qū)別
1娇唯、cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上寂玲;
2视乐、cookie不是很安全,別人可以分析存放在本地的cookie并進行cookie欺騙敢茁,考慮到安全應(yīng)當(dāng)使用session佑淀;
3、session會在一定時間內(nèi)保存在服務(wù)器上彰檬。當(dāng)訪問增多伸刃,會比較占用你服務(wù)器的性能》瓯叮考慮到減輕服務(wù)器性能方面捧颅,應(yīng)當(dāng)使用cookie;
4较雕、單個cookie在客戶端的限制是4K碉哑,就是說一個站點在客戶端存放的cookie不能超過4K
知乎上馮羅特的回答:
1挚币,session 在服務(wù)器端,cookie 在客戶端(瀏覽器)
2扣典,session 默認(rèn)被存在在服務(wù)器的一個文件里(不是內(nèi)存)
3妆毕,session 的運行依賴 session id,而 session id 是存在 cookie 中的贮尖,也就是說笛粘,如果瀏覽器禁用了 cookie ,同時 session 也會失效(但是可以通過其它方式實現(xiàn)湿硝,比如在 url 中傳遞 session_id)
4薪前,session 可以放在 文件、數(shù)據(jù)庫关斜、或內(nèi)存中都可以示括。
5,用戶驗證這種場合一般會用 session 因此痢畜,維持一個會話的核心就是客戶端的唯一標(biāo)識垛膝,即 session id