1. 程式人生 > >每周分享之cookie詳解

每周分享之cookie詳解

user cal 使用 程序 子目錄 服務 信息交互 也有 這也

    本章從JS方向講解cookie的使用。(實質上後端代碼也是差不多用法,無非讀取和設置兩塊)

    基本用法:document.cookie="username=pengpeng"; 修改的時候也是這句,重新賦值即可。

    一般的,cookie是記域名的,上面的寫法,比如在www.test.com域名下生效,但是不會在www.test.com/p123.html下生效,因為默認的cookie是不跨URL子目錄的,就是說cookie只記錄在當前url下,首頁的cookie是首頁的,列表頁是列表頁的,哪怕cookie名稱都叫username,它們也互不影響。

    實際項目中我們肯定是不允許這種情況存在的,首頁和列表頁以及終端頁等頁面的cookie必須共享,這個時候就需要設置一下path, 寫法:document.cookie="username=pengpeng;path=/"; 這個時候同一域名下的cookie共享,一般不會存在首頁設置的cookie在其他頁獲取不到。

    但也有特例,最近公司項目裏就遇到了,問題出在一些叫個人中心以及幫助中心的頁面,域名變了,準確的來說,二級域名變了 原本是www.test.com的,個人中心的域名是account.test.com,這個時候設置了path也沒用, 此時已跨域,而cookie默認不跨域,是的,既然我說默認了,那肯定是有解決方案了,那就是domain屬性!

    寫法:document.cookie="username=pengpeng;path=/;domain=test.com";

    註意,domain後面寫的是主域.com,只有這個時候瀏覽器裏的cookie才是跨子域的!(但實際上主域是沒法跨域的,最多跨子域,也就是最多實現二級域名、三級域名的cookie共享)。

    最近被這個坑的不輕,在公司丟人了,當時和公司產品說cookie不能跨域,差點改了需求,雖然是小改,雖然她們好像也不知道我的這個尷尬事,不過還是挺醉的(*/ω\*)

    用法基本就是上面提到的幾點了,註意事項也提到了,主要是path和domain的設置註意一下就行。關於為什麽用cookie,主要是方便,因為這東西是記錄在瀏覽器裏的,很多的用戶行為能直接存儲在用戶的這邊(順便提一下,用戶的數據如果全都存服務端,會給服務器帶來巨大壓力,特別是用戶量大的時候,所以這也是cookie的一個好處,減輕服務器壓力),不過總的來說,cookie只適合做少量存儲,或者臨時性存儲,畢竟瀏覽器是可以清理緩存和cookie的。

    既然提到客戶端和服務端的概念,所以也可以引深一下別的概念,cookie的好處在於客戶端存儲,減輕服務端壓力,但是有時候我們的一些數據(非用戶數據相關的或者是一些共享信息),我們希望大家都用,那麽這個時候就不能存在客戶端了,不然你的我用不了,我的你用不了,所以session的好處就體現出來了,這也是我要引深的一個地方,session是存儲在服務端的,所以能實現信息的共享或者完成和服務器的一些信息交互。

    cookie和session都是少量信息的存儲,一個存在客戶端,一個存在服務端,根據各自的場景使用即可。(前端方向一般cookie使用比較多,session很少,使用cookie需要註意一點,總大小,4KB!!)

    技術分享圖片

     除了session需要了解一下以外,application也可以了解一下,為了省事找了一張圖,很詳細的對比了:

    技術分享圖片

     嗯,以上已經很詳細說明了各個存值的場景和區別,不同情況的會分別去使用,application基本上我沒見過,很少有人用,客戶端cookie,服務端session、cache,webconfig一般後端在程序裏靈活配置的時候會用到。對了,JS瀏覽器存儲,除了cookie,還有一個叫本地存儲的黑科技,這個可比cookie存的東西多多了,相當於一個小數據庫,一個小的前端數據庫,可以存很多東西,學名Local Storage,這個用起來也挺簡單,就不贅述了,了解一下就行~~

     以上內容如果疑問歡迎指出,有興趣的道友也可以一起討論,一起學習一起進步!

每周分享之cookie詳解