歡迎關(guān)注公眾號(hào):程序員面試經(jīng)驗(yàn)分享(jobbible)
創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)、網(wǎng)站重做改版、綠春網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開(kāi)發(fā)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為綠春等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
問(wèn)題:SESSION與COOKIE的區(qū)別?
1、cookie數(shù)據(jù)存放在客戶(hù)的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙
?? 考慮到安全應(yīng)當(dāng)使用session。
3、cookie 是一種發(fā)送到客戶(hù)瀏覽器的文本串句柄,并保存在客戶(hù)機(jī)硬盤(pán)上,可以用來(lái)在某個(gè)WEB站點(diǎn)會(huì)話(huà)間持久的保持?jǐn)?shù)據(jù)。
4、session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪(fǎng)問(wèn)增多,會(huì)比較占用你服務(wù)器的性能
?? 考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE。
5、單個(gè)cookie保存的數(shù)據(jù)不能超過(guò)4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。
6、session其實(shí)指的就是訪(fǎng)問(wèn)者從到達(dá)某個(gè)特定主頁(yè)到離開(kāi)為止的那段時(shí)間。?Session其實(shí)是利用Cookie進(jìn)行信息處理的,當(dāng)用戶(hù)首先進(jìn)行了請(qǐng)求后,服務(wù)端就在用戶(hù)瀏覽器上創(chuàng)建了一個(gè)Cookie,當(dāng)這個(gè)Session結(jié)束時(shí),其實(shí)就是意味著這個(gè)Cookie就過(guò)期了。
注:為這個(gè)用戶(hù)創(chuàng)建的Cookie的名稱(chēng)是aspsessionid。這個(gè)Cookie的唯一目的就是為每一個(gè)用戶(hù)提供不同的身份認(rèn)證。
7、cookie和session的共同之處在于:cookie和session都是用來(lái)跟蹤瀏覽器用戶(hù)身份的會(huì)話(huà)方式。
session詳解
1、Session什么時(shí)候失效?
a. 服務(wù)器會(huì)把長(zhǎng)時(shí)間沒(méi)有活動(dòng)的Session從服務(wù)器內(nèi)存中清除,此時(shí)Session便失效。
b. 調(diào)用Session的invalidate方法。
2、Session對(duì)瀏覽器的要求:
雖然Session保存在服務(wù)器,對(duì)客戶(hù)端是透明的,它的正常運(yùn)行仍然需要客戶(hù)端瀏覽器的支持。這是因?yàn)镾ession需要使用Cookie作為識(shí)別標(biāo)志。HTTP協(xié)議是無(wú)狀態(tài)的,Session不能依據(jù)HTTP連接來(lái)判斷是否為同一客戶(hù),因此服務(wù)器向客戶(hù)端瀏覽器發(fā)送一個(gè)名為JSESSIONID的Cookie,它的值為該Session的id(也就是HttpSession.getId()的返回值)。Session依據(jù)該Cookie來(lái)識(shí)別是否為同一用戶(hù)。
該Cookie為服務(wù)器自動(dòng)生成的,它的maxAge屬性一般為-1,表示僅當(dāng)前瀏覽器內(nèi)有效,并且各瀏覽器窗口間不共享,關(guān)閉瀏覽器就會(huì)失效。因此同一機(jī)器的兩個(gè)瀏覽器窗口訪(fǎng)問(wèn)服務(wù)器時(shí),會(huì)生成兩個(gè)不同的Session。但是由瀏覽器窗口內(nèi)的鏈接、腳本等打開(kāi)的新窗口(也就是說(shuō)不是雙擊桌面瀏覽器圖標(biāo)等打開(kāi)的窗口)除外。這類(lèi)子窗口會(huì)共享父窗口的Cookie,因此會(huì)共享一個(gè)Session。
注意:新開(kāi)的瀏覽器窗口會(huì)生成新的Session,但子窗口除外。子窗口會(huì)共用父窗口的Session。例如,在鏈接上右擊,在彈出的快捷菜單中選擇"在新窗口中打開(kāi)"時(shí),子窗口便可以訪(fǎng)問(wèn)父窗口的Session。
?如果客戶(hù)端瀏覽器將Cookie功能禁用,或者不支持Cookie怎么辦?例如,絕大多數(shù)的手機(jī)瀏覽器都不支持Cookie。Java Web提供了另一種解決方案:URL地址重寫(xiě)。
URL地址重寫(xiě)是對(duì)客戶(hù)端不支持Cookie的解決方案。URL地址重寫(xiě)的原理是將該用戶(hù)Session的id信息重寫(xiě)到URL地址中。服務(wù)器能夠解析重寫(xiě)后的URL獲取Session的id。這樣即使客戶(hù)端不支持Cookie,也可以使用Session來(lái)記錄用戶(hù)狀態(tài)。HttpServletResponse類(lèi)提供了encodeURL(String url)實(shí)現(xiàn)URL地址重寫(xiě),該方法會(huì)自動(dòng)判斷客戶(hù)端是否支持Cookie。如果客戶(hù)端支持Cookie,會(huì)將URL原封不動(dòng)地輸出來(lái)。如果客戶(hù)端不支持Cookie,則會(huì)將用戶(hù)Session的id重寫(xiě)到URL中。
注意:TOMCAT判斷客戶(hù)端瀏覽器是否支持Cookie的依據(jù)是請(qǐng)求中是否含有Cookie。盡管客戶(hù)端可能會(huì)支持Cookie,但是由于第一次請(qǐng)求時(shí)不會(huì)攜帶任何Cookie(因?yàn)椴o(wú)任何Cookie可以攜帶),URL地址重寫(xiě)后的地址中仍然會(huì)帶有jsessionid。當(dāng)?shù)诙卧L(fǎng)問(wèn)時(shí)服務(wù)器已經(jīng)在瀏覽器中寫(xiě)入Cookie了,因此URL地址重寫(xiě)后的地址中就不會(huì)帶有jsessionid了。
Cookie詳解
Cookie總是保存在客戶(hù)端中,按在客戶(hù)端中的存儲(chǔ)位置,可分為內(nèi)存Cookie和硬盤(pán)Cookie。
內(nèi)存Cookie由瀏覽器維護(hù),保存在內(nèi)存中,瀏覽器關(guān)閉后就消失了,其存在時(shí)間是短暫的。硬盤(pán)Cookie保存在硬盤(pán)里,有一個(gè)過(guò)期時(shí)間,除非用戶(hù)手工清理或到了過(guò)期時(shí)間,硬盤(pán)Cookie不會(huì)被刪除,其存在時(shí)間是長(zhǎng)期的。所以,按存在時(shí)間,可分為非持久Cookie和持久Cookie。
1、用途
因?yàn)镠TTP協(xié)議是無(wú)狀態(tài)的,即服務(wù)器不知道用戶(hù)上一次做了什么,這嚴(yán)重阻礙了交互式Web應(yīng)用程序的實(shí)現(xiàn)。在典型的網(wǎng)上購(gòu)物場(chǎng)景中,用戶(hù)瀏覽了幾個(gè)頁(yè)面,買(mǎi)了一盒餅干和兩瓶飲料。最后結(jié)帳時(shí),由于HTTP的無(wú)狀態(tài)性,不通過(guò)額外的手段,服務(wù)器并不知道用戶(hù)到底買(mǎi)了什么。所以Cookie就是用來(lái)繞開(kāi)HTTP的無(wú)狀態(tài)性的“額外手段”之一。服務(wù)器可以設(shè)置或讀取Cookies中包含信息,借此維護(hù)用戶(hù)跟服務(wù)器會(huì)話(huà)中的狀態(tài)。
在剛才的購(gòu)物場(chǎng)景中,當(dāng)用戶(hù)選購(gòu)了第一項(xiàng)商品,服務(wù)器在向用戶(hù)發(fā)送網(wǎng)頁(yè)的同時(shí),還發(fā)送了一段Cookie,記錄著那項(xiàng)商品的信息。當(dāng)用戶(hù)訪(fǎng)問(wèn)另一個(gè)頁(yè)面,瀏覽器會(huì)把Cookie發(fā)送給服務(wù)器,于是服務(wù)器知道他之前選購(gòu)了什么。用戶(hù)繼續(xù)選購(gòu)飲料,服務(wù)器就在原來(lái)那段Cookie里追加新的商品信息。結(jié)帳時(shí),服務(wù)器讀取發(fā)送來(lái)的Cookie就行了。
Cookie另一個(gè)典型的應(yīng)用是當(dāng)?shù)卿浺粋€(gè)網(wǎng)站時(shí),網(wǎng)站往往會(huì)請(qǐng)求用戶(hù)輸入用戶(hù)名和密碼,并且用戶(hù)可以勾選“下次自動(dòng)登錄”。如果勾選了,那么下次訪(fǎng)問(wèn)同一網(wǎng)站時(shí),用戶(hù)會(huì)發(fā)現(xiàn)沒(méi)輸入用戶(hù)名和密碼就已經(jīng)登錄了。這正是因?yàn)榍耙淮蔚卿洉r(shí),服務(wù)器發(fā)送了包含登錄憑據(jù)(用戶(hù)名加密碼的某種加密形式)的Cookie到用戶(hù)的硬盤(pán)上。第二次登錄時(shí),(如果該Cookie尚未到期)瀏覽器會(huì)發(fā)送該Cookie,服務(wù)器驗(yàn)證憑據(jù),于是不必輸入用戶(hù)名和密碼就讓用戶(hù)登錄了。
2、Cookie的缺陷
? ?a. cookie會(huì)被附加在每個(gè)HTTP請(qǐng)求中,所以無(wú)形中增加了流量。
? ?b. 由于在HTTP請(qǐng)求中的cookie是明文傳遞的,所以安全性成問(wèn)題。(除非用HTTPS)
? ?c. Cookie的大小限制在4KB左右。對(duì)于復(fù)雜的存儲(chǔ)需求來(lái)說(shuō)是不夠用的。[2]
3、使用和禁用Cookies
用戶(hù)可以改變?yōu)g覽器的設(shè)置,以使用或者禁用Cookies。同時(shí)一些瀏覽器自帶或安裝開(kāi)發(fā)者工具包允許用戶(hù)查看,修改或刪除特定網(wǎng)站的Cookies信息。
4、識(shí)別功能
如果在一臺(tái)計(jì)算機(jī)中安裝多個(gè)瀏覽器,每個(gè)瀏覽器都會(huì)以獨(dú)立的空間存放cookie。因?yàn)閏ookie中不但可以確認(rèn)用戶(hù),還能包含計(jì)算機(jī)和瀏覽器的信息,所以一個(gè)用戶(hù)用不同的瀏覽器登錄或者用不同的計(jì)算機(jī)登錄,都會(huì)得到不同的cookie信息,另一方面,對(duì)于在同一臺(tái)計(jì)算機(jī)上使用同一瀏覽器的多用戶(hù)群,cookie不會(huì)區(qū)分他們的身份,除非他們使用不同的用戶(hù)名登錄。
5、隱私,安全和廣告
Cookies在某種程度上說(shuō)已經(jīng)嚴(yán)重危及用戶(hù)的隱私和安全。其中的一種方法是:一些公司的高層人員為了某種目的(譬如市場(chǎng)調(diào)研)而訪(fǎng)問(wèn)了從未去過(guò)的網(wǎng)站(通過(guò)搜索引擎查到的),而這些網(wǎng)站包含了一種叫做網(wǎng)頁(yè)臭蟲(chóng)的圖片,該圖片透明,且只有一個(gè)象素大?。ㄒ员汶[藏),它們的作用是將所有訪(fǎng)問(wèn)過(guò)此頁(yè)面的計(jì)算機(jī)寫(xiě)入cookie。而后,電子商務(wù)網(wǎng)站將讀取這些cookie信息,并尋找寫(xiě)入這些cookie的網(wǎng)站,隨即發(fā)送包含了針對(duì)這個(gè)網(wǎng)站的相關(guān)產(chǎn)品廣告的垃圾郵件給這些高級(jí)人員。
6、Cookies的替代品
鑒于cookie的局限和反對(duì)者的聲音,有如下一些替代方法:
Brownie方案,是一項(xiàng)開(kāi)放源代碼工程,由SourceForge發(fā)起。Brownie曾被用以共享在不同域中的接入,而cookies則被構(gòu)想成單一域中的接入。這項(xiàng)方案已經(jīng)停止開(kāi)發(fā)。
P3P,用以讓用戶(hù)獲得更多控制個(gè)人隱私權(quán)利的協(xié)議。在瀏覽網(wǎng)站時(shí),它類(lèi)似于cookie。
在與服務(wù)器傳輸數(shù)據(jù)時(shí),通過(guò)在地址后面添加唯一查詢(xún)串,讓服務(wù)器識(shí)別是否合法用戶(hù),也可以避免使用cookie。
●面試總結(jié):GC相關(guān)
●幻讀是什么,幻讀有什么問(wèn)題?
●你為什么離開(kāi)上家公司?
●一文看懂 MySQL 高性能優(yōu)化技巧實(shí)踐
============================================================
歡迎關(guān)注公眾號(hào):程序員面試經(jīng)驗(yàn)分享(jobbible)