【面試題】了解session和cookie嗎?

歡迎關(guān)注公眾號(hào):程序員面試經(jīng)驗(yàn)分享(jobbible)

問題:SESSION與COOKIE的區(qū)別渔扎?

1、cookie數(shù)據(jù)存放在客戶的瀏覽器上信轿,session數(shù)據(jù)放在服務(wù)器上晃痴。

2残吩、cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙

?? 考慮到安全應(yīng)當(dāng)使用session倘核。

3泣侮、cookie 是一種發(fā)送到客戶瀏覽器的文本串句柄,并保存在客戶機(jī)硬盤上紧唱,可以用來在某個(gè)WEB站點(diǎn)會(huì)話間持久的保持?jǐn)?shù)據(jù)活尊。

4、session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上漏益。當(dāng)訪問增多蛹锰,會(huì)比較占用你服務(wù)器的性能

?? 考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE绰疤。

5铜犬、單個(gè)cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie轻庆。

6癣猾、session其實(shí)指的就是訪問者從到達(dá)某個(gè)特定主頁到離開為止的那段時(shí)間。?Session其實(shí)是利用Cookie進(jìn)行信息處理的余爆,當(dāng)用戶首先進(jìn)行了請(qǐng)求后纷宇,服務(wù)端就在用戶瀏覽器上創(chuàng)建了一個(gè)Cookie,當(dāng)這個(gè)Session結(jié)束時(shí)蛾方,其實(shí)就是意味著這個(gè)Cookie就過期了呐粘。

注:為這個(gè)用戶創(chuàng)建的Cookie的名稱是aspsessionid。這個(gè)Cookie的唯一目的就是為每一個(gè)用戶提供不同的身份認(rèn)證转捕。

7作岖、cookie和session的共同之處在于:cookie和session都是用來跟蹤瀏覽器用戶身份的會(huì)話方式。

session詳解

1五芝、Session什么時(shí)候失效痘儡?

  a. 服務(wù)器會(huì)把長(zhǎng)時(shí)間沒有活動(dòng)的Session從服務(wù)器內(nèi)存中清除,此時(shí)Session便失效枢步。

  b. 調(diào)用Session的invalidate方法沉删。

2、Session對(duì)瀏覽器的要求:

 雖然Session保存在服務(wù)器醉途,對(duì)客戶端是透明的矾瑰,它的正常運(yùn)行仍然需要客戶端瀏覽器的支持。這是因?yàn)镾ession需要使用Cookie作為識(shí)別標(biāo)志隘擎。HTTP協(xié)議是無狀態(tài)的殴穴,Session不能依據(jù)HTTP連接來判斷是否為同一客戶,因此服務(wù)器向客戶端瀏覽器發(fā)送一個(gè)名為JSESSIONID的Cookie,它的值為該Session的id(也就是HttpSession.getId()的返回值)采幌。Session依據(jù)該Cookie來識(shí)別是否為同一用戶劲够。

該Cookie為服務(wù)器自動(dòng)生成的,它的maxAge屬性一般為-1休傍,表示僅當(dāng)前瀏覽器內(nèi)有效征绎,并且各瀏覽器窗口間不共享,關(guān)閉瀏覽器就會(huì)失效磨取。因此同一機(jī)器的兩個(gè)瀏覽器窗口訪問服務(wù)器時(shí)人柿,會(huì)生成兩個(gè)不同的Session。但是由瀏覽器窗口內(nèi)的鏈接忙厌、腳本等打開的新窗口(也就是說不是雙擊桌面瀏覽器圖標(biāo)等打開的窗口)除外凫岖。這類子窗口會(huì)共享父窗口的Cookie,因此會(huì)共享一個(gè)Session慰毅。

注意:新開的瀏覽器窗口會(huì)生成新的Session隘截,但子窗口除外。子窗口會(huì)共用父窗口的Session汹胃。例如婶芭,在鏈接上右擊,在彈出的快捷菜單中選擇"在新窗口中打開"時(shí)着饥,子窗口便可以訪問父窗口的Session犀农。

?如果客戶端瀏覽器將Cookie功能禁用,或者不支持Cookie怎么辦宰掉?例如呵哨,絕大多數(shù)的手機(jī)瀏覽器都不支持Cookie。Java Web提供了另一種解決方案:URL地址重寫轨奄。

  URL地址重寫是對(duì)客戶端不支持Cookie的解決方案孟害。URL地址重寫的原理是將該用戶Session的id信息重寫到URL地址中。服務(wù)器能夠解析重寫后的URL獲取Session的id挪拟。這樣即使客戶端不支持Cookie挨务,也可以使用Session來記錄用戶狀態(tài)。HttpServletResponse類提供了encodeURL(String url)實(shí)現(xiàn)URL地址重寫玉组,該方法會(huì)自動(dòng)判斷客戶端是否支持Cookie谎柄。如果客戶端支持Cookie,會(huì)將URL原封不動(dòng)地輸出來惯雳。如果客戶端不支持Cookie朝巫,則會(huì)將用戶Session的id重寫到URL中。

  注意:TOMCAT判斷客戶端瀏覽器是否支持Cookie的依據(jù)是請(qǐng)求中是否含有Cookie石景。盡管客戶端可能會(huì)支持Cookie劈猿,但是由于第一次請(qǐng)求時(shí)不會(huì)攜帶任何Cookie(因?yàn)椴o任何Cookie可以攜帶)拙吉,URL地址重寫后的地址中仍然會(huì)帶有jsessionid。當(dāng)?shù)诙卧L問時(shí)服務(wù)器已經(jīng)在瀏覽器中寫入Cookie了糙臼,因此URL地址重寫后的地址中就不會(huì)帶有jsessionid了庐镐。

Cookie詳解

Cookie總是保存在客戶端中恩商,按在客戶端中的存儲(chǔ)位置变逃,可分為內(nèi)存Cookie和硬盤Cookie。

內(nèi)存Cookie由瀏覽器維護(hù)怠堪,保存在內(nèi)存中揽乱,瀏覽器關(guān)閉后就消失了,其存在時(shí)間是短暫的粟矿。硬盤Cookie保存在硬盤里凰棉,有一個(gè)過期時(shí)間,除非用戶手工清理或到了過期時(shí)間陌粹,硬盤Cookie不會(huì)被刪除撒犀,其存在時(shí)間是長(zhǎng)期的。所以掏秩,按存在時(shí)間或舞,可分為非持久Cookie和持久Cookie。

1蒙幻、用途

因?yàn)镠TTP協(xié)議是無狀態(tài)的映凳,即服務(wù)器不知道用戶上一次做了什么,這嚴(yán)重阻礙了交互式Web應(yīng)用程序的實(shí)現(xiàn)邮破。在典型的網(wǎng)上購物場(chǎng)景中诈豌,用戶瀏覽了幾個(gè)頁面,買了一盒餅干和兩瓶飲料抒和。最后結(jié)帳時(shí)矫渔,由于HTTP的無狀態(tài)性,不通過額外的手段摧莽,服務(wù)器并不知道用戶到底買了什么擦耀。所以Cookie就是用來繞開HTTP的無狀態(tài)性的“額外手段”之一。服務(wù)器可以設(shè)置或讀取Cookies中包含信息掏颊,借此維護(hù)用戶跟服務(wù)器會(huì)話中的狀態(tài)普碎。

在剛才的購物場(chǎng)景中,當(dāng)用戶選購了第一項(xiàng)商品丑蛤,服務(wù)器在向用戶發(fā)送網(wǎng)頁的同時(shí)叠聋,還發(fā)送了一段Cookie,記錄著那項(xiàng)商品的信息受裹。當(dāng)用戶訪問另一個(gè)頁面碌补,瀏覽器會(huì)把Cookie發(fā)送給服務(wù)器虏束,于是服務(wù)器知道他之前選購了什么。用戶繼續(xù)選購飲料厦章,服務(wù)器就在原來那段Cookie里追加新的商品信息镇匀。結(jié)帳時(shí),服務(wù)器讀取發(fā)送來的Cookie就行了袜啃。

Cookie另一個(gè)典型的應(yīng)用是當(dāng)?shù)卿浺粋€(gè)網(wǎng)站時(shí)汗侵,網(wǎng)站往往會(huì)請(qǐng)求用戶輸入用戶名和密碼,并且用戶可以勾選“下次自動(dòng)登錄”群发。如果勾選了晰韵,那么下次訪問同一網(wǎng)站時(shí),用戶會(huì)發(fā)現(xiàn)沒輸入用戶名和密碼就已經(jīng)登錄了熟妓。這正是因?yàn)榍耙淮蔚卿洉r(shí)雪猪,服務(wù)器發(fā)送了包含登錄憑據(jù)(用戶名加密碼的某種加密形式)的Cookie到用戶的硬盤上。第二次登錄時(shí)起愈,(如果該Cookie尚未到期)瀏覽器會(huì)發(fā)送該Cookie只恨,服務(wù)器驗(yàn)證憑據(jù),于是不必輸入用戶名和密碼就讓用戶登錄了抬虽。

2官觅、Cookie的缺陷

? ?a. cookie會(huì)被附加在每個(gè)HTTP請(qǐng)求中,所以無形中增加了流量斥赋。

? ?b. 由于在HTTP請(qǐng)求中的cookie是明文傳遞的缰猴,所以安全性成問題。(除非用HTTPS)

? ?c. Cookie的大小限制在4KB左右疤剑。對(duì)于復(fù)雜的存儲(chǔ)需求來說是不夠用的滑绒。[2]

3、使用和禁用Cookies

用戶可以改變?yōu)g覽器的設(shè)置隘膘,以使用或者禁用Cookies疑故。同時(shí)一些瀏覽器自帶或安裝開發(fā)者工具包允許用戶查看,修改或刪除特定網(wǎng)站的Cookies信息弯菊。

4纵势、識(shí)別功能

如果在一臺(tái)計(jì)算機(jī)中安裝多個(gè)瀏覽器,每個(gè)瀏覽器都會(huì)以獨(dú)立的空間存放cookie管钳。因?yàn)閏ookie中不但可以確認(rèn)用戶钦铁,還能包含計(jì)算機(jī)和瀏覽器的信息,所以一個(gè)用戶用不同的瀏覽器登錄或者用不同的計(jì)算機(jī)登錄才漆,都會(huì)得到不同的cookie信息牛曹,另一方面,對(duì)于在同一臺(tái)計(jì)算機(jī)上使用同一瀏覽器的多用戶群醇滥,cookie不會(huì)區(qū)分他們的身份黎比,除非他們使用不同的用戶名登錄超营。

5、隱私阅虫,安全和廣告

Cookies在某種程度上說已經(jīng)嚴(yán)重危及用戶的隱私和安全演闭。其中的一種方法是:一些公司的高層人員為了某種目的(譬如市場(chǎng)調(diào)研)而訪問了從未去過的網(wǎng)站(通過搜索引擎查到的),而這些網(wǎng)站包含了一種叫做網(wǎng)頁臭蟲的圖片颓帝,該圖片透明米碰,且只有一個(gè)象素大小(以便隱藏)躲履,它們的作用是將所有訪問過此頁面的計(jì)算機(jī)寫入cookie见间。而后聊闯,電子商務(wù)網(wǎng)站將讀取這些cookie信息工猜,并尋找寫入這些cookie的網(wǎng)站,隨即發(fā)送包含了針對(duì)這個(gè)網(wǎng)站的相關(guān)產(chǎn)品廣告的垃圾郵件給這些高級(jí)人員菱蔬。

6篷帅、Cookies的替代品

鑒于cookie的局限和反對(duì)者的聲音,有如下一些替代方法:

Brownie方案拴泌,是一項(xiàng)開放源代碼工程魏身,由SourceForge發(fā)起。Brownie曾被用以共享在不同域中的接入蚪腐,而cookies則被構(gòu)想成單一域中的接入箭昵。這項(xiàng)方案已經(jīng)停止開發(fā)。

P3P回季,用以讓用戶獲得更多控制個(gè)人隱私權(quán)利的協(xié)議家制。在瀏覽網(wǎng)站時(shí),它類似于cookie泡一。

在與服務(wù)器傳輸數(shù)據(jù)時(shí)颤殴,通過在地址后面添加唯一查詢串,讓服務(wù)器識(shí)別是否合法用戶鼻忠,也可以避免使用cookie涵但。

面試總結(jié):GC相關(guān)

幻讀是什么,幻讀有什么問題帖蔓?

你為什么離開上家公司矮瘟?

一文看懂 MySQL 高性能優(yōu)化技巧實(shí)踐

============================================================

歡迎關(guān)注公眾號(hào):程序員面試經(jīng)驗(yàn)分享(jobbible)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市塑娇,隨后出現(xiàn)的幾起案子澈侠,更是在濱河造成了極大的恐慌,老刑警劉巖钝吮,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埋涧,死亡現(xiàn)場(chǎng)離奇詭異板辽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)棘催,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門劲弦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人醇坝,你說我怎么就攤上這事邑跪。” “怎么了呼猪?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵画畅,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我宋距,道長(zhǎng)轴踱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任谚赎,我火速辦了婚禮淫僻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘壶唤。我一直安慰自己雳灵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布闸盔。 她就那樣靜靜地躺著悯辙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迎吵。 梳的紋絲不亂的頭發(fā)上躲撰,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音钓觉,去河邊找鬼茴肥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛荡灾,可吹牛的內(nèi)容都是我干的瓤狐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼批幌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼础锐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荧缘,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤皆警,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后截粗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體信姓,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸵隧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了意推。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豆瘫。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖菊值,靈堂內(nèi)的尸體忽然破棺而出外驱,到底是詐尸還是另有隱情,我是刑警寧澤腻窒,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布昵宇,位于F島的核電站,受9級(jí)特大地震影響儿子,放射性物質(zhì)發(fā)生泄漏瓦哎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一典徊、第九天 我趴在偏房一處隱蔽的房頂上張望杭煎。 院中可真熱鬧,春花似錦卒落、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扑媚,卻和暖如春腰湾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疆股。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工费坊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人旬痹。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓附井,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親两残。 傳聞我的和親對(duì)象是個(gè)殘疾皇子永毅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 會(huì)話(Session)跟蹤是Web程序中常用的技術(shù),用來跟蹤用戶的整個(gè)會(huì)話人弓。常用的會(huì)話跟蹤技術(shù)是Cookie與Se...
    笨蛋小明閱讀 1,032評(píng)論 1 1
  • 1. cookie 1.1 什么是cookie cookie 是存儲(chǔ)于訪問者的計(jì)算機(jī)中的變量沼死。每當(dāng)同一臺(tái)計(jì)算機(jī)通過...
    cbw100閱讀 4,064評(píng)論 0 13
  • 寫在前面 cookie和session的區(qū)別: 1、cookie數(shù)據(jù)存放在客戶的瀏覽器上崔赌,session數(shù)據(jù)放在服...
    Pitfalls閱讀 1,526評(píng)論 0 17
  • 我的目標(biāo):2018年12月31日前收入¥1,500,000意蛀,解決先生的卡債房貸耸别,獲得財(cái)富富足、喜悅县钥、豐盛太雨。 動(dòng)機(jī):...
    Panling0閱讀 198評(píng)論 0 0
  • 第二十九打卡。前天突發(fā)咳血魁蒜,忙乎了一天囊扳,終究沒事情了,幸好兜看、幸好锥咸;所以,這兩天也在調(diào)整细移,之后也會(huì)盡量更新搏予,畫不能停...
    知小酌閱讀 300評(píng)論 2 1