Cookie與Session

**Cookie **是當(dāng)你瀏覽某網(wǎng)站時(shí),網(wǎng)站存儲(chǔ)在你機(jī)器上的一個(gè)小文本文件,它可以記錄你的用戶ID,密碼、瀏覽過的網(wǎng)頁、停留的時(shí)間等信息,當(dāng)你再次來到該網(wǎng)站時(shí),網(wǎng)站通過讀取Cookie,得知你的相關(guān)信息,就可以做出相應(yīng)的動(dòng)作,例如在頁面顯示歡迎你的標(biāo)語,或者讓你不用輸入ID、密碼就直接登錄等。
** Session **存儲(chǔ)在服務(wù)器端,一般放在服務(wù)器的內(nèi)存中。Session 對象存儲(chǔ)特定用戶會(huì)話所需的信息。這樣,當(dāng)用戶在應(yīng)用程序的 Web 頁之間跳轉(zhuǎn)時(shí),存儲(chǔ)在 Session 對象中的變量將不會(huì)丟失,而是在整個(gè)用戶會(huì)話中一直存在下去。當(dāng)用戶請求來自應(yīng)用程序的 Web 頁時(shí),如果該用戶還沒有會(huì)話,則 Web 服務(wù)器將自動(dòng)創(chuàng)建一個(gè) Session 對象。當(dāng)會(huì)話過期或被放棄后,服務(wù)器將終止該會(huì)話。

1.Cookie的設(shè)置與發(fā)送過程

Paste_Image.png

一個(gè)cookie的設(shè)置以及發(fā)送過程分為以下四步:
(1)客戶端發(fā)送一個(gè)http請求到服務(wù)器端
(2)服務(wù)器端發(fā)送一個(gè)http響應(yīng)到客戶端,其中包含Set-Cookie頭部
(3)客戶端發(fā)送一個(gè)http請求到服務(wù)器端,其中包含Cookie頭部
(4)服務(wù)器端發(fā)送一個(gè)http響應(yīng)到客戶端

Paste_Image.png

查看筆記功能:

Paste_Image.png

2、如何防止session超時(shí)?

眾所周知,當(dāng)用戶登錄網(wǎng)站后較長一段時(shí)間沒有與服務(wù)器進(jìn)行交互,將會(huì)導(dǎo)致服務(wù)器上的用戶會(huì)話數(shù)據(jù)(即session)被銷毀。此時(shí),當(dāng)用戶再次操作網(wǎng)頁時(shí),如果服務(wù)器進(jìn)行了session校驗(yàn),那么瀏覽器將會(huì)提醒用戶session超時(shí)。
那么,如何解決用戶登錄后較長時(shí)間未操作而導(dǎo)致的session失效的問題呢?

導(dǎo)致這個(gè)問題的關(guān)鍵詞有兩個(gè):一個(gè)是「長時(shí)間」,一個(gè)是「未操作」。 
  如果用戶未操作的「長時(shí)間」超過了服務(wù)器配置的session超時(shí)時(shí)間,并導(dǎo)致session失效,那么我們延長session的超時(shí)時(shí)間,讓用戶原來的「長時(shí)間」與超時(shí)時(shí)間相比,變得不「長」,不就可以解決了嗎?  
  如果用戶是長時(shí)間「未操作」導(dǎo)致session失效,那么我們想辦法產(chǎn)生「操作」,讓用戶每隔一小段時(shí)間就「操作」一次,與服務(wù)器產(chǎn)生交互,那么session自然也不會(huì)失效。

3、Cookie 和Session 的區(qū)別與應(yīng)用

Cookie和session由于實(shí)現(xiàn)手段不同,因此也各有優(yōu)缺點(diǎn)和各自的應(yīng)用場景:
** 應(yīng)用場景**
Cookie的典型應(yīng)用場景是Remember Me服務(wù),即用戶的賬戶信息通過cookie的形式保存在客戶端,當(dāng)用戶再次請求匹配的URL的時(shí)候,賬戶信息會(huì)被傳送到服務(wù)端,交由相應(yīng)的程序完成自動(dòng)登錄等功能。當(dāng)然也可以保存一些客戶端信息,比如頁面布局以及搜索歷史等等。
Session的典型應(yīng)用場景是用戶登錄某網(wǎng)站之后,將其登錄信息放入session,在以后的每次請求中查詢相應(yīng)的登錄信息以確保該用戶合法。當(dāng)然還是有購物車等等經(jīng)典場景;
安全性
Cookie將信息保存在客戶端,如果不進(jìn)行加密的話,無疑會(huì)暴露一些隱私信息,安全性很差,一般情況下敏感信息是經(jīng)過加密后存儲(chǔ)在cookie中,但很容易就會(huì)被竊取。而session只會(huì)將信息存儲(chǔ)在服務(wù)端,如果存儲(chǔ)在文件或數(shù)據(jù)庫中,也有被竊取的可能,只是可能性比cookie小了太多。
Session安全性方面比較突出的是存在會(huì)話劫持的問題,這是一種安全威脅。
總體來講,session的安全性要高于cookie。
性能
Cookie存儲(chǔ)在客戶端,消耗的是客戶端的I/O和內(nèi)存,而session存儲(chǔ)在服務(wù)端,消耗的是服務(wù)端的資源。但是session對服務(wù)器造成的壓力比較集中,而cookie很好地分散了資源消耗,就這點(diǎn)來說,cookie是要優(yōu)于session的;
但是Cookie會(huì)增加網(wǎng)絡(luò)流量。
** 時(shí)效性**
Cookie可以通過設(shè)置有效期使其較長時(shí)間內(nèi)存在于客戶端,而session一般只有比較短的有效期(也可以通過用戶主動(dòng)銷毀session或關(guān)閉瀏覽器后引發(fā)超時(shí));
其他
Cookie的處理在開發(fā)中沒有session方便。而且cookie在客戶端是有數(shù)量和大小的限制的,而session的大小卻只以硬件為限制,能存儲(chǔ)的數(shù)據(jù)無疑大了很多。


Cookie基礎(chǔ)實(shí)驗(yàn)

Cookie的屬性如下:
Cookie名稱,Cookie名稱必須使用只能用在URL中的字符,一般用字母及數(shù)字,不能包含特殊字符,如有特殊字符想要轉(zhuǎn)碼。如js操作cookie的時(shí)候可以使用escape()對名稱轉(zhuǎn)碼。

Cookie值,Cookie值同理Cookie的名稱,可以進(jìn)行轉(zhuǎn)碼和加密。

Expires,過期日期,一個(gè)GMT格式的時(shí)間,當(dāng)過了這個(gè)日期之后,瀏覽器就會(huì)將這個(gè)Cookie刪除掉,當(dāng)不設(shè)置這個(gè)的時(shí)候,Cookie在瀏覽器關(guān)閉后消失。

Path,一個(gè)路徑,在這個(gè)路徑下面的頁面才可以訪問該Cookie,一般設(shè)為“/”,以表示同一個(gè)站點(diǎn)的所有頁面都可以訪問這個(gè)Cookie。

Domain,子域,指定在該子域下才可以訪問Cookie,例如要讓Cookie在a.test.com下可以訪問,但在b.test.com下不能訪問,則可將domain設(shè)置成a.test.com。

Secure,安全性,指定Cookie是否只能通過https協(xié)議訪問,一般的Cookie使用HTTP協(xié)議既可訪問,如果設(shè)置了Secure(沒有值),則只有當(dāng)使用https協(xié)議連接時(shí)cookie才可以被頁面訪問。

HttpOnly,如果在Cookie中設(shè)置了"HttpOnly"屬性,那么通過程序(JS腳本、Applet等)將無法讀取到Cookie信息。

1、初始化項(xiàng)目并安裝必要的包

#mkdir cookie
#npm  init
#npm npm install express cookie-parser --save

2、編寫Cookie程序(設(shè)置與讀取cookie)

Paste_Image.png
Paste_Image.png
Paste_Image.png

編寫如下程序:


Paste_Image.png

首先調(diào)用read,沒有相應(yīng)的cookie信息。

Paste_Image.png

調(diào)用write,可以看到response中有set-Cookie

Paste_Image.png

再次調(diào)用read,可以看到resquest中附帶了,之前設(shè)置的cookie信息。

Paste_Image.png

Paste_Image.png

3、設(shè)置Cookie中的域名
缺省為當(dāng)前域名

Paste_Image.png

首先清除該域名下的所有cookie。

Paste_Image.png

調(diào)用write,設(shè)置cookie

Paste_Image.png

調(diào)用read,沒有cookie信息,因?yàn)橛蛎灰恢隆?/p>

Paste_Image.png

在客戶端通過修改host文件,來模擬一個(gè)域名

Paste_Image.png

再次調(diào)用write,設(shè)置cookie。

Paste_Image.png

調(diào)用read,可以看到cookie信息。

Paste_Image.png

Paste_Image.png

4、設(shè)置Cookie的Path
缺省為"/"

Paste_Image.png

首先清除該域名下的所有cookie。
調(diào)用write,設(shè)置cookie,path='/abc'

Paste_Image.png
Paste_Image.png

調(diào)用abc,可以看到cookie信息。

Paste_Image.png

Paste_Image.png

5、設(shè)置Cookie的Expires
該值缺省為:session ;瀏覽器關(guān)閉后失效

Paste_Image.png

調(diào)用write,設(shè)置cookie,失效時(shí)間為2分鐘。

Paste_Image.png

上面的時(shí)間中,GMT的含義是格林尼治標(biāo)準(zhǔn)時(shí)間。

調(diào)用read

Paste_Image.png
Paste_Image.png

2分鐘后調(diào)用read,已經(jīng)沒有cookie信息了。

Paste_Image.png
Paste_Image.png

通過maxAge設(shè)置Cookie失效時(shí)間

Paste_Image.png

Paste_Image.png

6、設(shè)置Cookie的 httponly
缺省為false

Paste_Image.png

調(diào)用write,設(shè)置Cookie

Paste_Image.png

下面通過腳本來讀取cookie,只能讀出a的值。

Paste_Image.png

可以修改未設(shè)置為httponly的數(shù)據(jù)。

Paste_Image.png
Paste_Image.png
Paste_Image.png

Paste_Image.png

6、設(shè)置Cookie的signed
對cookie的值進(jìn)行簽名,防止用戶篡改其值

Paste_Image.png

b已經(jīng)被簽名

Paste_Image.png

簽名的數(shù)據(jù)在req.signedCookies中。

Paste_Image.png
Paste_Image.png

可以使用unescape進(jìn)行解碼。

Paste_Image.png
Paste_Image.png

8、Cookie可能存在的問題:

(1)瀏覽器向服務(wù)器發(fā)起的每個(gè)請求都會(huì)帶上cookie;加大了網(wǎng)絡(luò)流量。
(2)在客戶端,Cookie會(huì)存在本地計(jì)算機(jī)中,存在安全隱患;
(3)http協(xié)議本身是是無狀態(tài)的,但是現(xiàn)代站點(diǎn)很多都需要維持登錄態(tài),也就是維持會(huì)話。因此可能會(huì)把用戶的信息存儲(chǔ)在Cookie中;
(4)有些服務(wù)器對請求頭的大小有限制。

Paste_Image.png

2、安全性問題:
(1)偽造Cookie:可以采用加密的方式防止偽造。
Cookie截獲:使用Https協(xié)議。
(2)跨站腳本攻擊(Cross Site Scripting,常簡寫作XSS),可以借助httpOnly屬性來防止該攻擊。
(3)Cookie截獲:使用Https協(xié)議。

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,656評論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內(nèi)容

  • cookie cookie的起源 早期web剛開始出現(xiàn)復(fù)雜的應(yīng)用程序時(shí),產(chǎn)生了對于能夠直接在客戶端上存儲(chǔ)用戶信息能...
    zenggo閱讀 3,881評論 1 52
  • Cookie與Session詳解讀書筆記,從概念、操作、應(yīng)用、注意事項(xiàng)以及區(qū)別等幾方面詳細(xì)闡述兩者的基礎(chǔ)知識(shí),它們...
    奮斗live閱讀 1,096評論 0 2
  • 本文分別對Cookie與Session做一個(gè)介紹和總結(jié),并分別對兩個(gè)知識(shí)點(diǎn)進(jìn)行對比分析,讓大家對Cookie和Se...
    舍末逐本閱讀 350評論 0 0
  • 本文分別對Cookie與Session做一個(gè)介紹和總結(jié),并分別對兩個(gè)知識(shí)點(diǎn)進(jìn)行對比分析,讓大家對Cookie和Se...
    HyacinthC閱讀 211評論 0 2
  • 什么更好——廉價(jià)的幸福好呢,還是崇高的痛苦好?——陀思妥耶夫斯基 桌布——蒼蠅的斗篷 五顏六色的唾沫 攀爬...
    子健閱讀 493評論 3 5