Cookie 和 Session 有什么區(qū)別?

2021-02-19    分類: 網(wǎng)站建設(shè)

曾經(jīng)問過很多朋友這個(gè)問題: Cookie 和 Session 有什么區(qū)別呢?大部分的面試者應(yīng)該都可以說上一兩句,比如:什么是 Cookie?什么是 Session?兩者的區(qū)別等。

但如果再往深入探討的話,就慢慢有一些朋友不太了解了,談起原理時(shí)就很少有朋友全部回答準(zhǔn)確。今天和大家一起深入聊聊有關(guān) Cookie 和 Session 的話題 。

第一層樓

什么是 Cookie 和 Session ?初級程序員高頻面試題。

什么是 Cookie

HTTP Cookie(也叫 Web Cookie或?yàn)g覽器 Cookie)是服務(wù)器發(fā)送到用戶瀏覽器并保存在本地的一小塊數(shù)據(jù),它會在瀏覽器下次向同一服務(wù)器再發(fā)起請求時(shí)被攜帶并發(fā)送到服務(wù)器上。通常,它用于告知服務(wù)端兩個(gè)請求是否來自同一瀏覽器,如保持用戶的登錄狀態(tài)。Cookie 使基于無狀態(tài)的 HTTP 協(xié)議記錄穩(wěn)定的狀態(tài)信息成為了可能。

Cookie 主要用于以下三個(gè)方面:

  • 會話狀態(tài)管理(如用戶登錄狀態(tài)、購物車、游戲分?jǐn)?shù)或其它需要記錄的信息)
  • 個(gè)性化設(shè)置(如用戶自定義設(shè)置、主題等)
  • 瀏覽器行為跟蹤(如跟蹤分析用戶行為等)

什么是 Session

Session 代表著服務(wù)器和客戶端一次會話的過程。Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當(dāng)用戶在應(yīng)用程序的 Web 頁之間跳轉(zhuǎn)時(shí),存儲在 Session 對象中的變量將不會丟失,而是在整個(gè)用戶會話中一直存在下去。當(dāng)客戶端關(guān)閉會話,或者 Session 超時(shí)失效時(shí)會話結(jié)束。

第二層樓

Cookie 和 Session 有什么不同?

  • 作用范圍不同,Cookie 保存在客戶端(瀏覽器),Session 保存在服務(wù)器端。
  • 存取方式的不同,Cookie 只能保存 ASCII,Session 可以存任意數(shù)據(jù)類型,一般情況下我們可以在 Session 中保持一些常用變量信息,比如說 UserId 等。
  • 有效期不同,Cookie 可設(shè)置為長時(shí)間保持,比如我們經(jīng)常使用的默認(rèn)登錄功能,Session 一般失效時(shí)間較短,客戶端關(guān)閉或者 Session 超時(shí)都會失效。
  • 隱私策略不同,Cookie 存儲在客戶端,比較容易遭到不法獲取,早期有人將用戶的登錄名和密碼存儲在 Cookie 中導(dǎo)致信息被竊取;Session 存儲在服務(wù)端,安全性相對 Cookie 要好一些。
  • 存儲大小不同, 單個(gè) Cookie 保存的數(shù)據(jù)不能超過 4K,Session 可存儲數(shù)據(jù)遠(yuǎn)高于 Cookie。

前兩層樓內(nèi)容,絕大部分同學(xué)都可以準(zhǔn)確回答

第三層樓

為什么需要 Cookie 和 Session,他們有什么關(guān)聯(lián)?

說起來為什么需要 Cookie ,這就需要從瀏覽器開始說起,我們都知道瀏覽器是沒有狀態(tài)的(HTTP 協(xié)議無狀態(tài)),這意味著瀏覽器并不知道是張三還是李四在和服務(wù)端打交道。這個(gè)時(shí)候就需要有一個(gè)機(jī)制來告訴服務(wù)端,本次操作用戶是否登錄,是哪個(gè)用戶在執(zhí)行的操作,那這套機(jī)制的實(shí)現(xiàn)就需要 Cookie 和 Session 的配合。

那么 Cookie 和 Session 是如何配合的呢?我畫了一張圖大家可以先了解下。


用戶第一次請求服務(wù)器的時(shí)候,服務(wù)器根據(jù)用戶提交的相關(guān)信息,創(chuàng)建創(chuàng)建對應(yīng)的 Session ,請求返回時(shí)將此 Session 的唯一標(biāo)識信息 SessionID 返回給瀏覽器,瀏覽器接收到服務(wù)器返回的 SessionID 信息后,會將此信息存入到 Cookie 中,同時(shí) Cookie 記錄此 SessionID 屬于哪個(gè)域名

當(dāng)用戶第二次訪問服務(wù)器的時(shí)候,請求會自動判斷此域名下是否存在 Cookie 信息,如果存在自動將 Cookie 信息也發(fā)送給服務(wù)端,服務(wù)端會從 Cookie 中獲取 SessionID,再根據(jù) SessionID 查找對應(yīng)的 Session 信息,如果沒有找到說明用戶沒有登錄或者登錄失效,如果找到 Session 證明用戶已經(jīng)登錄可執(zhí)行后面操作。

根據(jù)以上流程可知,SessionID 是連接 Cookie 和 Session 的一道橋梁,大部分系統(tǒng)也是根據(jù)此原理來驗(yàn)證用戶登錄狀態(tài)。

三層樓的內(nèi)容,大部分同學(xué)可以講清楚。

第四層樓

既然服務(wù)端是根據(jù) Cookie 中的信息判斷用戶是否登錄,那么如果瀏覽器中禁止了 Cookie,如何保障整個(gè)機(jī)制的正常運(yùn)轉(zhuǎn)。

第一種方案,每次請求中都攜帶一個(gè) SessionID 的參數(shù),也可以 Post 的方式提交,也可以在請求的地址后面拼接 xxx?SessionID=123456...。

第二種方案,Token 機(jī)制。Token 機(jī)制多用于 App 客戶端和服務(wù)器交互的模式,也可以用于 Web 端做用戶狀態(tài)管理。

Token 的意思是“令牌”,是服務(wù)端生成的一串字符串,作為客戶端進(jìn)行請求的一個(gè)標(biāo)識。Token 機(jī)制和 Cookie 和 Session 的使用機(jī)制比較類似。

當(dāng)用戶第一次登錄后,服務(wù)器根據(jù)提交的用戶信息生成一個(gè) Token,響應(yīng)時(shí)將 Token 返回給客戶端,以后客戶端只需帶上這個(gè) Token 前來請求數(shù)據(jù)即可,無需再次登錄驗(yàn)證。

四層樓的內(nèi)容,一部分同學(xué)可以講清楚。

第五層樓

如何考慮分布式 Session 問題?

在互聯(lián)網(wǎng)公司為了可以支撐更大的流量,后端往往需要多臺服務(wù)器共同來支撐前端用戶請求,那如果用戶在 A 服務(wù)器登錄了,第二次請求跑到服務(wù) B 就會出現(xiàn)登錄失效問題。

分布式 Session 一般會有以下幾種解決方案:

  • Nginx ip_hash 策略,服務(wù)端使用 Nginx 代理,每個(gè)請求按訪問 IP 的 hash 分配,這樣來自同一 IP 固定訪問一個(gè)后臺服務(wù)器,避免了在服務(wù)器 A 創(chuàng)建 Session,第二次分發(fā)到服務(wù)器 B 的現(xiàn)象。
  • Session 復(fù)制,任何一個(gè)服務(wù)器上的 Session 發(fā)生改變(增刪改),該節(jié)點(diǎn)會把這個(gè) Session 的所有內(nèi)容序列化,然后廣播給所有其它節(jié)點(diǎn)。
  • 共享 Session,服務(wù)端無狀態(tài)話,將用戶的 Session 等信息使用緩存中間件來統(tǒng)一管理,保障分發(fā)到每一個(gè)服務(wù)器的響應(yīng)結(jié)果都一致。

建議采用第三種方案。

第六層樓

如何解決跨域請求?Jsonp 跨域的原理是什么?

說起跨域請求,必須要了解瀏覽器的同源策略,同源策略/SOP(Same origin policy)是一種約定,由 Netscape 公司 1995年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到 XSS、CSFR 等攻擊。所謂同源是指"協(xié)議+域名+端口"三者相同,即便兩個(gè)不同的域名指向同一個(gè) ip 地址,也非同源。

解決跨域請求的常用方法是:

  • 通過代理來避免,比如使用 Nginx 在后端轉(zhuǎn)發(fā)請求,避免了前端出現(xiàn)跨域的問題。
  • 通過 Jsonp 跨域
  • 其它跨域解決方案

重點(diǎn)談一下 Jsonp 跨域原理。瀏覽器的同源策略把跨域請求都禁止了,但是頁面中的


鏈接:https://juejin.im/post/5cd9037ee51d456e5c5babca

當(dāng)前名稱:Cookie 和 Session 有什么區(qū)別?
路徑分享:http://m.kartarina.com/news17/101867.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)移動網(wǎng)站建設(shè)微信公眾號品牌網(wǎng)站建設(shè)云服務(wù)器商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
主站蜘蛛池模板: 无码少妇丰满熟妇一区二区| 无码国产精品一区二区免费式影视| 久久精品国产亚洲AV无码娇色| 无码爆乳护士让我爽| 久久亚洲精品成人无码网站| 无码8090精品久久一区| 亚洲的天堂av无码| 免费人妻av无码专区| 亚洲日韩中文字幕无码一区| 国产成年无码AV片在线韩国| 曰韩无码无遮挡A级毛片| 国产成年无码久久久免费| 亚洲中文久久精品无码1| 久久中文字幕无码专区| 无码 免费 国产在线观看91| 亚洲AV无码久久寂寞少妇| 宅男在线国产精品无码| 欧洲黑大粗无码免费| 亚洲最大无码中文字幕| 中文字幕乱码人妻无码久久| 国产精品无码av片在线观看播| 国产精品久久久久无码av| 寂寞少妇做spa按摩无码| 无码喷水一区二区浪潮AV| 成人免费无码精品国产电影| 蜜桃臀AV高潮无码| 精品亚洲成A人无码成A在线观看| 东京热人妻无码人av| 亚洲精品人成无码中文毛片 | 2021无码最新国产在线观看| 国产精品无码素人福利不卡| 国产精品亚洲专区无码牛牛| 亚洲av无码一区二区三区四区 | 精品无码久久久久久国产| 日韩人妻无码一区二区三区久久| 无码专区—VA亚洲V天堂| 亚洲av无码片在线播放| 伊人久久精品无码麻豆一区| 亚洲av无码片在线观看| 97免费人妻无码视频| 无码人妻精品中文字幕免费东京热|