簡單介紹下cookie是如何在http中運用的

最近筆試發現很多公司都在考cookie,而我對cookie的瞭解僅僅知道它是一門客戶端存儲技術,通過http協議,通過請求在客戶端(瀏覽器)和服務器端交互,主要作用是記錄每次請求後來跟蹤會話,所以在沒有session之前,基本上所有的網站都是用cookie來跟蹤數據的,所謂跟蹤數據,其實就是記錄數據,比如說你在網站上做了些操作,沒有做完,關掉瀏覽器後下次打開,仍然保留有信息,這就是跟蹤數據,記錄數據,學過java-web,理解session會話機制,就很好理解了,再然後就是知道cooki是通過鍵值對保存數據,設置cookie的名字,設置值。然後就沒啦。

接下來,大體的瞭解下cookie:

首先要知道爲什麼有cookie,用戶在網站上必然要不停的向服務器發送HTTP請求來傳輸數據,而HTTP請求又是無狀態的的協議,一旦數據交互完成後,客戶端與服務端的連接就會關閉,再次交互數據需要重新建立新的連接,這意味着服務器沒法跟蹤上次請求記錄,這時就需要cookie這種機制了,來滿足HTTP無狀態的不足,稍後來講HTTP是如何攜帶cookie的,先解釋下cookie的概念:

當服務器需要記錄用戶狀態時,就向客戶端發送一個cookie,客戶端就會把cookie保存起來,當客戶端再次請求服務器時,就會把cookie一同交給服務器,服務器檢查cookie來辨認用戶,這樣就能記錄每個用戶的狀態了。

接下來我們說下HTTP請求是如何攜帶cookie(網易筆試題):

有兩個HTTP頭部和cookie有關的:Set-cookie 和Cookie

Set-cookie 由服務器端發送,它包含在響應頭部,它用於在客戶端創建一個cookie

Cookie 由客戶端發送,它包含在請求頭部

 Set-Cookie: <name>=<value>[; <name>=<value>]...
                    [; expires=<date>][; domain=<domain_name>]
                    [; path=<some_path>][; secure][; httponly]

expris : 設置cookie的有效值,如果超過date,cookie將失效,如果沒有設置這個選項,當瀏覽器關閉時,cookie將失效

dimain:可以訪問該cookie的域名 如 .google.com 注意第一個字符必須是. 所有以google.com的結尾的域名都可以訪問

path: cookie的使用路徑

secure : 該cookie是否僅被使用安全協議傳輸(Https),默認false

httponly : 表示該cookie不能被客戶端腳本(JavaScript)獲得


Java 中提供了一套操作cookie的API:

http://www.cnblogs.com/xdp-gacl/p/3803033.html


Cookie cookie = new Cookie(''username","ilv"); //新建cookie

cookie.setMaxAge(integer.max_value); // 設置cookie的生命週期

如果參數爲負數,表示臨時性cookie,不會被寫到cookie文件中,關閉窗口就失效了,如果爲0表示刪除這個cookie(修改cookie時用於刪除它,因爲cookie沒有提供刪除的方法),要想修改cookie只能用一個同名的cookie來覆蓋,達到修改的目的,同時設置setMaxAge(0) 則表示刪掉它

注意:修改、刪除Cookie時,新建的Cookie除value、maxAge之外的所有屬性,例如name、path、domain等,都要與原Cookie完全一樣。否則,瀏覽器將視爲兩個不同的Cookie不予覆蓋,導致修改、刪除失敗。

還有從客戶端讀取cookie時,除了name value,其它都是不可讀的,只有name和value會被提交的服務器,maxAge僅僅時瀏覽器來判斷cookie是否過期,至於path,domain就是判斷那種請求屬於哪個cookie

cookie.setDomain(".google.com");設置域名,決定運行時cookie訪問的域名

注意:cookie是不可以跨域名的,同一個一級域名下的二級域名也是不能交互的,如www.google.com & image.google.com 無法交換,不過可以按照上面的方法設置,注意domain是以.開頭的

cookie.setPath("/session/");       path屬性決定允許訪問Cookie的路徑

cookie.setSecure(true); // 設置cookie的安全屬性,true表示只能在安全協議中傳遞(https),但並不能保證絕對的安全,如果要提高安全性,可以在程序中對cookie 加密

response.addCookie(cookie) // 必須執行這一句


最後說下JavaScript操作cookie:

因爲cookie是保存在客戶端的,所以瀏覽器具有操作的先決條件,介紹一個常用操作:

document.write(document.cookie); // 輸出本頁所有的cookie

注意 A網站的JavaScript只能讀取A網站的,讀不了B網站的,安全問題,你懂的




發佈了91 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章