cookie分號後面沒有值 帶你了解下Cookie

2021-10-14 10:46:00 字數 2712 閱讀 8706

會話跟蹤技術用來跟蹤使用者的整個會話,會話就是使用者在登入**後的一系列動作,常用的是cookie和session,兩者的唯一區別是前者在瀏覽器記錄資訊,後者在伺服器。今天只是簡單的說下cookie,知道的就算看個熱鬧,不知道的希望能幫到你。

以上是我抓包得來,從上面的可以看出,cookie中的值是key-value格式的,而且是通過乙個分號和空格來間隔的。

cookie的流程是:伺服器設定cookie---通過response將cookie傳到前端儲存在瀏覽器中---前端訪問後端介面時在request header中自動新增上cookie---服務端接收到cookie做一些業務操作。

那麼cookie是怎麼工作的呢?首先cookie對於瀏覽器來說只是乙個純文字,瀏覽器的安裝目錄下是會有乙個專門的資料夾用來儲存各個**的cookie。當從前端傳送請求到後端的時候,瀏覽器會自動的檢測下是否有cookie,如果有就會新增到請求的頭資訊中,以上是瀏覽器自動幫我們做的。

儲存到cookie中的資料,瀏覽器會自動的放在http請求中,只有是每次請求都必須要傳送給伺服器的資料才會放到cookie,比如身份驗證資訊。如果是不必要的,必然會增加網路開銷。針對這個儲存資訊大小,cookie還是做了一些限制的。每個網域名稱下的cookie 的大小最大為4kb,每個網域名稱下的cookie數量最多為20個(但很多瀏覽器廠商在具體實現時支援大於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的網頁所在的網域名稱,path預設值為設定該cookie的網頁所在的目錄。

兩點需要注意:domain可以設定為頁面本身的網域名稱,或者是該網域名稱的父網域名稱,比如說,www.sougou.com,可是設定為www.sougou.com,也可以設定為sougou.com。

secure

secure選項用來設定cookie只在確保安全的請求中才會傳送。當請求是https或者其他安全協議時,包含 secure 選項的 cookie才能被傳送至伺服器。

預設情況下,cookie不會帶secure選項(即為空)。所以預設情況下,不管是https協議還是http協議的請求,cookie 都會被傳送至服務端。但要注意一點,secure選項只是限定了在安全情況下才可以傳輸給服務端,但並不代表你不能看到這個 cookie。

這個選項用來設定cookie是否能通過 js 去訪問。預設情況下,cookie不會帶httponly選項(即為空),所以預設情況下,客戶端是可以通過js**去訪問(包括讀取、修改、刪除等)這個cookie的。當cookie帶httponly選項時,客戶端則無法通過js**去訪問操作(包括讀取、修改、刪除等)這個cookie。

在客戶端是不能通過js**去設定乙個httponly型別的cookie的,這種型別的cookie只能通過服務端來設定。

關於限制客戶端去訪問cookie的問題,這樣做的目的就是為了保證安全。

試想:如果任何 cookie 都能被客戶端通過document.cookie獲取會發生什麼。當我們的網頁遭受了 xss 攻擊,有一段惡意的script指令碼插到了網頁中。這段script指令碼做的事情是:通過document.cookie讀取了使用者身份驗證相關的 cookie,並將這些 cookie 傳送到了攻擊者的伺服器。攻擊者輕而易舉就拿到了使用者身份驗證資訊,於是就可以利用此使用者資訊訪問目標伺服器(因為攻擊者有合法的使用者身份驗證資訊,所以會通過你伺服器的驗證)。

什麼時候 cookie 會被覆蓋:cookie中的name、domain、path 這3個字段數值都相同的時候。

如果顯式設定了 domain,則設定成什麼,瀏覽器就存成什麼;但如果沒有顯式設定,則瀏覽器會自動取 url 的 host 作為 domain 值;

修改 cookie。

要想修改乙個cookie,只需要重新賦值就行,舊的值會被新的值覆蓋。但要注意一點,在設定新cookie時,path、domain這兩個字段一定要和之前保持一樣。否則是不會確定為之前的cookie,而是新增了乙個新的cookie。

刪除 cookie

刪除乙個cookie 也是一樣的,也是重新賦值,只要將這個新cookie的expires選項設定為乙個過去的時間點或者是直接賦值為0就行了。但同樣要注意,path和domain同樣需要和之前的cookie保持一致。

在開發的過程中,使用者的登入態是大部分是放到cookie裡,因為cookie自己有著完整的一套配置,包括上文講到的各種屬性和安全問題,總體來說還是比較方便的。東西不多,也很簡單,希望每個讀者都能完全消化。

感謝**。

cookie分號後面沒有值 瀏覽器Cookie介紹

web應用程式是使用http協議傳輸完成的。http協議是無狀態的協議。當資料交換完畢以後,客戶端與伺服器端的連線就會關閉。當再次交換資料的時候需要重新建立新的連線。這就意味著伺服器無法從連線上跟蹤會話。大家應該都有這樣的經歷,當你登入乙個 的時候會提醒你要不要記住賬戶和密碼,這樣下次來你就不用再次...

if語句後面的分號

if語句後面的分號 關於if else 語句還有乙個容易出錯的地方就是與空語句的連用。看下面的例子 if null p fun 這裡的fun 函式並不是在null p 的時候被呼叫,而是任何時候都會被呼叫。問題就出在if 語句後面的分號上。在c 語言中,分號預示著一條語句的結尾,但是並不是每條c 語...

for迴圈後面的分號

include int main return 0 表示本行語句結束,在for後面加上 說明for已經結束,表示不進行任何 的執行,就相當乙個空語句。注意以下語句的分號 1.for i 1 i 4 i 表示可以執行到i 3,注意此時i 4,但不執行。2.for i 1 i 4 i 表示不執行該語句,...