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

歡迎關注公衆號:程序員面試經驗分享(jobbible)

問題:SESSION與COOKIE的區別?

1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙

   考慮到安全應當使用session。

3、cookie 是一種發送到客戶瀏覽器的文本串句柄,並保存在客戶機硬盤上,可以用來在某個WEB站點會話間持久的保持數據。

4、session會在一定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能

   考慮到減輕服務器性能方面,應當使用COOKIE。

5、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。

6、session其實指的就是訪問者從到達某個特定主頁到離開爲止的那段時間。 Session其實是利用Cookie進行信息處理的,當用戶首先進行了請求後,服務端就在用戶瀏覽器上創建了一個Cookie,當這個Session結束時,其實就是意味着這個Cookie就過期了。

注:爲這個用戶創建的Cookie的名稱是aspsessionid。這個Cookie的唯一目的就是爲每一個用戶提供不同的身份認證。

7、cookie和session的共同之處在於:cookie和session都是用來跟蹤瀏覽器用戶身份的會話方式。

session詳解

1、Session什麼時候失效?

  a. 服務器會把長時間沒有活動的Session從服務器內存中清除,此時Session便失效。

  b. 調用Session的invalidate方法。

2、Session對瀏覽器的要求:

 雖然Session保存在服務器,對客戶端是透明的,它的正常運行仍然需要客戶端瀏覽器的支持。這是因爲Session需要使用Cookie作爲識別標誌。HTTP協議是無狀態的,Session不能依據HTTP連接來判斷是否爲同一客戶,因此服務器向客戶端瀏覽器發送一個名爲JSESSIONID的Cookie,它的值爲該Session的id(也就是HttpSession.getId()的返回值)。Session依據該Cookie來識別是否爲同一用戶。

該Cookie爲服務器自動生成的,它的maxAge屬性一般爲-1,表示僅當前瀏覽器內有效,並且各瀏覽器窗口間不共享,關閉瀏覽器就會失效。因此同一機器的兩個瀏覽器窗口訪問服務器時,會生成兩個不同的Session。但是由瀏覽器窗口內的鏈接、腳本等打開的新窗口(也就是說不是雙擊桌面瀏覽器圖標等打開的窗口)除外。這類子窗口會共享父窗口的Cookie,因此會共享一個Session。

注意:新開的瀏覽器窗口會生成新的Session,但子窗口除外。子窗口會共用父窗口的Session。例如,在鏈接上右擊,在彈出的快捷菜單中選擇"在新窗口中打開"時,子窗口便可以訪問父窗口的Session。

 如果客戶端瀏覽器將Cookie功能禁用,或者不支持Cookie怎麼辦?例如,絕大多數的手機瀏覽器都不支持Cookie。Java Web提供了另一種解決方案:URL地址重寫。

  URL地址重寫是對客戶端不支持Cookie的解決方案。URL地址重寫的原理是將該用戶Session的id信息重寫到URL地址中。服務器能夠解析重寫後的URL獲取Session的id。這樣即使客戶端不支持Cookie,也可以使用Session來記錄用戶狀態。HttpServletResponse類提供了encodeURL(String url)實現URL地址重寫,該方法會自動判斷客戶端是否支持Cookie。如果客戶端支持Cookie,會將URL原封不動地輸出來。如果客戶端不支持Cookie,則會將用戶Session的id重寫到URL中。

  注意:TOMCAT判斷客戶端瀏覽器是否支持Cookie的依據是請求中是否含有Cookie。儘管客戶端可能會支持Cookie,但是由於第一次請求時不會攜帶任何Cookie(因爲並無任何Cookie可以攜帶),URL地址重寫後的地址中仍然會帶有jsessionid。當第二次訪問時服務器已經在瀏覽器中寫入Cookie了,因此URL地址重寫後的地址中就不會帶有jsessionid了。

Cookie詳解

Cookie總是保存在客戶端中,按在客戶端中的存儲位置,可分爲內存Cookie和硬盤Cookie。

內存Cookie由瀏覽器維護,保存在內存中,瀏覽器關閉後就消失了,其存在時間是短暫的。硬盤Cookie保存在硬盤裏,有一個過期時間,除非用戶手工清理或到了過期時間,硬盤Cookie不會被刪除,其存在時間是長期的。所以,按存在時間,可分爲非持久Cookie和持久Cookie。

1、用途

因爲HTTP協議是無狀態的,即服務器不知道用戶上一次做了什麼,這嚴重阻礙了交互式Web應用程序的實現。在典型的網上購物場景中,用戶瀏覽了幾個頁面,買了一盒餅乾和兩瓶飲料。最後結帳時,由於HTTP的無狀態性,不通過額外的手段,服務器並不知道用戶到底買了什麼。所以Cookie就是用來繞開HTTP的無狀態性的“額外手段”之一。服務器可以設置或讀取Cookies中包含信息,藉此維護用戶跟服務器會話中的狀態。

在剛纔的購物場景中,當用戶選購了第一項商品,服務器在向用戶發送網頁的同時,還發送了一段Cookie,記錄着那項商品的信息。當用戶訪問另一個頁面,瀏覽器會把Cookie發送給服務器,於是服務器知道他之前選購了什麼。用戶繼續選購飲料,服務器就在原來那段Cookie裏追加新的商品信息。結帳時,服務器讀取發送來的Cookie就行了。

Cookie另一個典型的應用是當登錄一個網站時,網站往往會請求用戶輸入用戶名和密碼,並且用戶可以勾選“下次自動登錄”。如果勾選了,那麼下次訪問同一網站時,用戶會發現沒輸入用戶名和密碼就已經登錄了。這正是因爲前一次登錄時,服務器發送了包含登錄憑據(用戶名加密碼的某種加密形式)的Cookie到用戶的硬盤上。第二次登錄時,(如果該Cookie尚未到期)瀏覽器會發送該Cookie,服務器驗證憑據,於是不必輸入用戶名和密碼就讓用戶登錄了。

2、Cookie的缺陷

   a. cookie會被附加在每個HTTP請求中,所以無形中增加了流量。

   b. 由於在HTTP請求中的cookie是明文傳遞的,所以安全性成問題。(除非用HTTPS)

   c. Cookie的大小限制在4KB左右。對於複雜的存儲需求來說是不夠用的。[2]

3、使用和禁用Cookies

用戶可以改變瀏覽器的設置,以使用或者禁用Cookies。同時一些瀏覽器自帶或安裝開發者工具包允許用戶查看,修改或刪除特定網站的Cookies信息。

4、識別功能

如果在一臺計算機中安裝多個瀏覽器,每個瀏覽器都會以獨立的空間存放cookie。因爲cookie中不但可以確認用戶,還能包含計算機和瀏覽器的信息,所以一個用戶用不同的瀏覽器登錄或者用不同的計算機登錄,都會得到不同的cookie信息,另一方面,對於在同一臺計算機上使用同一瀏覽器的多用戶羣,cookie不會區分他們的身份,除非他們使用不同的用戶名登錄。

5、隱私,安全和廣告

Cookies在某種程度上說已經嚴重危及用戶的隱私和安全。其中的一種方法是:一些公司的高層人員爲了某種目的(譬如市場調研)而訪問了從未去過的網站(通過搜索引擎查到的),而這些網站包含了一種叫做網頁臭蟲的圖片,該圖片透明,且只有一個象素大小(以便隱藏),它們的作用是將所有訪問過此頁面的計算機寫入cookie。而後,電子商務網站將讀取這些cookie信息,並尋找寫入這些cookie的網站,隨即發送包含了針對這個網站的相關產品廣告的垃圾郵件給這些高級人員。

6、Cookies的替代品

鑑於cookie的侷限和反對者的聲音,有如下一些替代方法:

Brownie方案,是一項開放源代碼工程,由SourceForge發起。Brownie曾被用以共享在不同域中的接入,而cookies則被構想成單一域中的接入。這項方案已經停止開發。

P3P,用以讓用戶獲得更多控制個人隱私權利的協議。在瀏覽網站時,它類似於cookie。

在與服務器傳輸數據時,通過在地址後面添加唯一查詢串,讓服務器識別是否合法用戶,也可以避免使用cookie。

webp

面試總結:GC相關

幻讀是什麼,幻讀有什麼問題?

你爲什麼離開上家公司?

一文看懂 MySQL 高性能優化技巧實踐

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

歡迎關注公衆號:程序員面試經驗分享(jobbible)

webp


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章