摘要:針對這個存儲信息大小,還是做了一些限制的。關于限制客戶端去訪問的問題,這樣做的目的就是為了保證安全。當我們的網(wǎng)頁遭受了攻擊,有一段惡意的腳本插到了網(wǎng)頁中。但同樣要注意,和同樣需要和之前的保持一致。
會話跟蹤技術用來跟蹤用戶的整個會話,會話就是用戶在登錄網(wǎng)站后的一系列動作,常用的是Cookie和Session,兩者的唯一區(qū)別是前者在瀏覽器記錄信息,后者在服務器。今天只是簡單的說下Cookie,知道的就算看個熱鬧,不知道的希望能幫到你。
以上圖片是我抓包得來,從上面的圖片可以看出,cookie中的值是key-value格式的,而且是通過一個分號和空格來間隔的。
cookie的流程是:服務器設置cookie---通過response將cookie傳到前端保存在瀏覽器中---前端訪問后端接口時在request header中自動添加上cookie---服務端接收到cookie做一些業(yè)務操作。
那么cookie是怎么工作的呢?首先cookie對于瀏覽器來說只是一個純文本,瀏覽器的安裝目錄下是會有一個專門的文件夾用來保存各個網(wǎng)站的cookie。當從前端發(fā)送請求到后端的時候,瀏覽器會自動的檢測下是否有cookie,如果有就會添加到請求的頭信息中,以上是瀏覽器自動幫我們做的。
存儲到cookie中的數(shù)據(jù),瀏覽器會自動的放在http請求中,只有是每次請求都必須要發(fā)送給服務器的數(shù)據(jù)才會放到cookie,比如身份驗證信息。如果是不必要的,必然會增加網(wǎng)絡開銷。針對這個存儲信息大小,cookie還是做了一些限制的。每個域名下的cookie 的大小最大為4KB,每個域名下的cookie數(shù)量最多為20個(但很多瀏覽器廠商在具體實現(xiàn)時支持大于20個)。
cookie的屬性包括:過期時間;域名、路徑等等,這些可以自己設置,如果不手動設置就會使用cookie的默認設置。
expires
過期時間,expires必須是 GMT 格式的時間(可以通過new Date().toGMTString()或者 new Date().toUTCString() 來獲得)。
如果沒有設置的話,那么默認的有效期就是session,就是會話cookie,這種會在瀏覽器關掉的時候就沒有了。
domain和path
domain是域名,path是路徑,兩者組合起來就構成了 URL,domain和path一起來限制 cookie 能被哪些 URL 訪問。
就是說在訪問這個域名或者是該域名的子域名下,目錄是在該目錄或者是在該目錄下的子目錄下的時候,瀏覽器會自動把cookie放到請求頭部中。
如果沒有設置這兩個選項,則會使用默認值。domain的默認值為設置該cookie的網(wǎng)頁所在的域名,path默認值為設置該cookie的網(wǎng)頁所在的目錄。
兩點需要注意:domain可以設置為頁面本身的域名,或者是該域名的父域名,比如說,www.sougou.com,可是設置為www.sougou.com,也可以設置為sougou.com。
secure
secure選項用來設置cookie只在確保安全的請求中才會發(fā)送。當請求是HTTPS或者其他安全協(xié)議時,包含 secure 選項的 cookie才能被發(fā)送至服務器。
默認情況下,cookie不會帶secure選項(即為空)。所以默認情況下,不管是HTTPS協(xié)議還是HTTP協(xié)議的請求,cookie 都會被發(fā)送至服務端。但要注意一點,secure選項只是限定了在安全情況下才可以傳輸給服務端,但并不代表你不能看到這個 cookie。
httpOnly
這個選項用來設置cookie是否能通過 js 去訪問。默認情況下,cookie不會帶httpOnly選項(即為空),所以默認情況下,客戶端是可以通過js代碼去訪問(包括讀取、修改、刪除等)這個cookie的。當cookie帶httpOnly選項時,客戶端則無法通過js代碼去訪問操作(包括讀取、修改、刪除等)這個cookie。
在客戶端是不能通過js代碼去設置一個httpOnly類型的cookie的,這種類型的cookie只能通過服務端來設置。
關于限制客戶端去訪問cookie的問題,這樣做的目的就是為了保證安全。
試想:如果任何 cookie 都能被客戶端通過document.cookie獲取會發(fā)生什么。當我們的網(wǎng)頁遭受了 XSS 攻擊,有一段惡意的script腳本插到了網(wǎng)頁中。這段script腳本做的事情是:通過document.cookie讀取了用戶身份驗證相關的 cookie,并將這些 cookie 發(fā)送到了攻擊者的服務器。攻擊者輕而易舉就拿到了用戶身份驗證信息,于是就可以利用此用戶信息訪問目標服務器(因為攻擊者有合法的用戶身份驗證信息,所以會通過你服務器的驗證)。
下面的這段是從項目中找到的一段關于設置cookie的代碼:
public void addCookie(HttpServletResponse response, String cookieValue) { if (this.cookieDomain == null) { throw new IllegalArgumentException("cookies domain is not null"); } else { Cookie cookie = new Cookie(this.coookieName, cookieValue); cookie.setPath(this.cookiePath); if (this.cookieDomain != null) { cookie.setDomain(this.cookieDomain); } if (this.cookieMaxAge != null) { cookie.setMaxAge(this.cookieMaxAge); } if (this.cookieSecure) { cookie.setSecure(true); } if (this.cookieHttpOnly) { cookie.setHttpOnly(true); } response.addCookie(cookie); } }
什么時候 cookie 會被覆蓋:cookie中的name、domain、path 這3個字段數(shù)值都相同的時候。
如果顯式設置了 domain,則設置成什么,瀏覽器就存成什么;但如果沒有顯式設置,則瀏覽器會自動取 url 的 host 作為 domain 值;
修改 cookie。
要想修改一個cookie,只需要重新賦值就行,舊的值會被新的值覆蓋。但要注意一點,在設置新cookie時,path、domain這兩個字段一定要和之前保持一樣。否則是不會確定為之前的cookie,而是添加了一個新的cookie。
刪除 cookie
刪除一個cookie 也是一樣的,也是重新賦值,只要將這個新cookie的expires選項設置為一個過去的時間點或者是直接賦值為0就行了。但同樣要注意,path和domain同樣需要和之前的cookie保持一致。
在開發(fā)的過程中,用戶的登錄態(tài)是大部分是放到cookie里,因為cookie自己有著完整的一套配置,包括上文講到的各種屬性和安全問題,總體來說還是比較方便的。
東西不多,也很簡單,希望每個讀者都能完全消化。
這樣的分享會一直持續(xù),你的關注、轉(zhuǎn)發(fā)和點贊是對我最大的支持,感謝。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73956.html
摘要:如果不指定,默認為當前文檔的主機不包含子域名。標識指定了主機下的哪些路徑可以接受該路徑必須存在于請求中。具體的使用參考教程和類似,但是可以直接使用來操作,具體的參看參考聊一聊前端存儲那些事兒聊一聊 cookie 為什么會有cookie http協(xié)議的無狀態(tài),所謂無狀態(tài)即是服務器并不是知道這次的請求和上次的請求是不是同一個client發(fā)來的,就好比你經(jīng)常去一家超市買東西,老板并不記得你是...
摘要:如圖圖顧名思義,,是級別的存儲。如筆者寫的一篇淺析文章聊一聊百度移動端首頁前端速度那些事兒讀者們可以嘗試使用。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/blog/frontenddriver 在web開發(fā)越來越復雜的今天,前端擁有的能力也越來越多。其中最重要的一項莫過于web存儲。...
摘要:要快,但是我們的服務也必須萬無一失,后續(xù)我會分享百度移動端首頁的前端架構設計那么這樣的優(yōu)化,是如何做到的呢,又如何兼顧穩(wěn)定性,架構性,與速度呢別急,讓我們把這些優(yōu)化一一道來。百度移動端首頁的很多就是這樣緩存在客戶端的。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/blog/fronte...
摘要:所以今天,就和大家一起聊一聊前端的安全那些事兒。我們就聊一聊前端工程師們需要注意的那些安全知識。殊不知,這不僅僅是違反了的標準而已,也同樣會被黑客所利用。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/blog... 隨著互聯(lián)網(wǎng)的發(fā)達,各種WEB應用也變得越來越復雜,滿足了用戶的各種需求...
閱讀 3914·2021-09-10 11:22
閱讀 2385·2021-09-03 10:30
閱讀 3699·2019-08-30 15:55
閱讀 1970·2019-08-30 15:44
閱讀 870·2019-08-30 15:44
閱讀 620·2019-08-30 14:04
閱讀 3079·2019-08-29 17:18
閱讀 1300·2019-08-29 15:04