国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

你真的了解 Cookie 和 Session 嗎

lijy91 / 1580人閱讀

摘要:瀏覽器的同源策略把跨域請(qǐng)求都禁止了,但是頁(yè)面中的標(biāo)簽是例外,不受同源策略限制。的理念就是,與服務(wù)端約定好一個(gè)回調(diào)函數(shù)名,服務(wù)端接收到請(qǐng)求后,將返回一段,在這段代碼中調(diào)用了約定好的回調(diào)函數(shù),并且將數(shù)據(jù)作為參數(shù)進(jìn)行傳遞。

我在做面試官的時(shí)候,曾經(jīng)問(wèn)過(guò)很多朋友這個(gè)問(wèn)題: Cookie 和 Session 有什么區(qū)別呢?大部分的面試者應(yīng)該都可以說(shuō)上一兩句,比如:什么是 Cookie?什么是 Session??jī)烧叩膮^(qū)別等。

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

第一層樓

什么是 Cookie 和 Session ");

什么是 Cookie

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

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

會(huì)話狀態(tài)管理(如用戶(hù)登錄狀態(tài)、購(gòu)物車(chē)、游戲分?jǐn)?shù)或其它需要記錄的信息)

個(gè)性化設(shè)置(如用戶(hù)自定義設(shè)置、主題等)

瀏覽器行為跟蹤(如跟蹤分析用戶(hù)行為等)

什么是 Session

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

第二層樓

Cookie 和 Session 有什么不同?

作用范圍不同,Cookie 保存在客戶(hù)端(瀏覽器),Session 保存在服務(wù)器端。

存取方式的不同,Cookie 只能保存 ASCII,Session 可以存任意數(shù)據(jù)類(lèi)型,一般情況下我們可以在 Session 中保持一些常用變量信息,比如說(shuō) UserId 等。

有效期不同,Cookie 可設(shè)置為長(zhǎng)時(shí)間保持,比如我們經(jīng)常使用的默認(rèn)登錄功能,Session 一般失效時(shí)間較短,客戶(hù)端關(guān)閉或者 Session 超時(shí)都會(huì)失效。

隱私策略不同,Cookie 存儲(chǔ)在客戶(hù)端,比較容易遭到不法獲取,早期有人將用戶(hù)的登錄名和密碼存儲(chǔ)在 Cookie 中導(dǎo)致信息被竊取;Session 存儲(chǔ)在服務(wù)端,安全性相對(duì) Cookie 要好一些。

存儲(chǔ)大小不同, 單個(gè) Cookie 保存的數(shù)據(jù)不能超過(guò) 4K,Session 可存儲(chǔ)數(shù)據(jù)遠(yuǎn)高于 Cookie。

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

第三層樓

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

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

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

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

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

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

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

第四層樓

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

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

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

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

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

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

第五層樓

如何考慮分布式 Session 問(wèn)題?

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

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

Nginx ip_hash 策略,服務(wù)端使用 Nginx 代理,每個(gè)請(qǐng)求按訪問(wèn) IP 的 hash 分配,這樣來(lái)自同一 IP 固定訪問(wèn)一個(gè)后臺(tái)服務(wù)器,避免了在服務(wù)器 A 創(chuàng)建 Session,第二次分發(fā)到服務(wù)器 B 的現(xiàn)象。

Session 復(fù)制,任何一個(gè)服務(wù)器上的 Session 發(fā)生改變(增刪改),該節(jié)點(diǎn)會(huì)把這個(gè) Session 的所有內(nèi)容序列化,然后廣播給所有其它節(jié)點(diǎn)。

共享 Session,服務(wù)端無(wú)狀態(tài)話,將用戶(hù)的 Session 等信息使用緩存中間件來(lái)統(tǒng)一管理,保障分發(fā)到每一個(gè)服務(wù)器的響應(yīng)結(jié)果都一致。

建議采用第三種方案。

第六層樓

如何解決跨域請(qǐng)求?Jsonp 跨域的原理是什么?

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

解決跨域請(qǐng)求的常用方法是:

通過(guò)代理來(lái)避免,比如使用 Nginx 在后端轉(zhuǎn)發(fā)請(qǐng)求,避免了前端出現(xiàn)跨域的問(wèn)題。

通過(guò) Jsonp 跨域

其它跨域解決方案

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/6698.html

相關(guān)文章

  • 摩拜前端周刊第8期

    摘要:地址前端詞典提高幸福感的個(gè)技巧推薦文章介紹了個(gè)更加簡(jiǎn)潔優(yōu)雅的使用技巧。這些技巧確實(shí)在實(shí)際開(kāi)發(fā)中十分常用,作者總結(jié)的很好,特別是針對(duì)降級(jí)問(wèn)題又學(xué)到了一個(gè)新思路。值得奮戰(zhàn)在一線的攻城獅們閱讀學(xué)習(xí)。Ladies and 鄉(xiāng)親們,摩拜前端周刊起航啦~ 摩拜前端團(tuán)隊(duì)會(huì)收集每周前端優(yōu)秀文章,每周五發(fā)布至掘金平臺(tái),歡迎關(guān)注我們~ 過(guò)個(gè)沒(méi)什么了不起的一天,耀眼一些,你有資格 Top 榜 「中高級(jí)前端」...

    lykops 評(píng)論0 收藏0
  • 詳解 CookieSession,Token

    摘要:由于是存在客戶(hù)端上的,所以瀏覽器加入了一些限制確保不會(huì)被惡意使用,同時(shí)不會(huì)占據(jù)太多磁盤(pán)空間。簽名是對(duì)前兩部分的簽名,防止數(shù)據(jù)被篡改。的作用最開(kāi)始的初衷是為了實(shí)現(xiàn)授權(quán)和身份認(rèn)證作用的,可以實(shí)現(xiàn)無(wú)狀態(tài),分布式的應(yīng)用授權(quán)。 前言 無(wú)狀態(tài)的HTTP協(xié)議 很久很久之前, Web基本都是文檔的瀏覽而已。既然是瀏覽, 作為服務(wù)器, 不需要記錄在某一段時(shí)間里都瀏覽了什么文檔, 每次請(qǐng)求都是一個(gè)新的HT...

    Allen 評(píng)論0 收藏0
  • session理解

    摘要:理解還是那句。。。。而還不是很理解的,谷歌下,要理解這兩個(gè)東西其實(shí)也不難。。當(dāng)瀏覽器端禁用時(shí),這個(gè)依然會(huì)被創(chuàng)建。其實(shí)我的理解很簡(jiǎn)單不對(duì)的地方歡迎指出。。 session理解 還是那句。。。。新手上路。。大神歡迎指點(diǎn) 1.session的概念 其實(shí)什么是session?什么是cookie?這些都是些老掉牙的問(wèn)題了。。而做過(guò)相關(guān)的開(kāi)發(fā)的人,基本都知道。。而還不是很理解的,谷歌下,要理解這兩...

    phpmatt 評(píng)論0 收藏0
  • 騰訊大廈與我有個(gè)約定(面試精華帖)

    摘要:第二天相同的時(shí)間相同的地方,我卻走錯(cuò)了地方,原來(lái)成都騰訊大廈有兩棟。 在一個(gè)雨蒙蒙的清晨,百般無(wú)聊的閑逛中,突然回憶起了我這一生中的第一次面試經(jīng)歷。雖然結(jié)果是以失敗而告終,但此時(shí)此刻的回憶,帶給我的并不是失敗而是成長(zhǎng)。 作為一名實(shí)習(xí)生,我深刻的感受到在校園與社會(huì)夾縫中生活的不易。也十分的幸運(yùn),我還有足夠的青春與活力驅(qū)動(dòng)著我去學(xué)習(xí),讓我的未來(lái)不再遙不可及;讓我能在社會(huì)的這份土壤里扎根成長(zhǎng)...

    monw3c 評(píng)論0 收藏0
  • 騰訊大廈與我有個(gè)約定(面試精華帖)

    摘要:第二天相同的時(shí)間相同的地方,我卻走錯(cuò)了地方,原來(lái)成都騰訊大廈有兩棟。 在一個(gè)雨蒙蒙的清晨,百般無(wú)聊的閑逛中,突然回憶起了我這一生中的第一次面試經(jīng)歷。雖然結(jié)果是以失敗而告終,但此時(shí)此刻的回憶,帶給我的并不是失敗而是成長(zhǎng)。 作為一名實(shí)習(xí)生,我深刻的感受到在校園與社會(huì)夾縫中生活的不易。也十分的幸運(yùn),我還有足夠的青春與活力驅(qū)動(dòng)著我去學(xué)習(xí),讓我的未來(lái)不再遙不可及;讓我能在社會(huì)的這份土壤里扎根成長(zhǎng)...

    yimo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<