Token和Session 原理及優(yōu)缺點

Session和Token的區(qū)別

一暂吉、cookie

http請求時無狀態(tài)的陆蟆。就是說第一次和服務器連接并登陸成功后,第二次請求服務器仍然不知道當前請求的用戶凤藏。

cookie出現就是解決了這個問題奸忽,第一次登陸后服務器返回一些數據(cookie)給瀏覽器堕伪,然后瀏覽器保存在本地,當用戶第二次返回請求的時候栗菜,就會把上次請求存儲的cookie數據自動攜帶給服務器欠雌。

如果關閉瀏覽器cookie失效(cookie就是保存在內存中)

如果關閉瀏覽器cookie不失效(cookie保存在磁盤中)

二、session

session和cookie的作用有點類似疙筹,都是為了存儲用戶相關的信息富俄。不同的是,cookie是存儲在本地瀏覽器而咆,而session存儲在服務器霍比。存儲在服務器的數據會更加的安全,不容易被竊取暴备。但存儲在服務器也有一定的弊端悠瞬,就是會占用服務器的資源。

1涯捻、存儲在服務端:通過cookie存儲一個session_id浅妆,然后具體的數據則是保存在session中。如果用戶已經登錄障癌,則服務器會在cookie中保存一個session_id狂打,下次再次請求的時候,會把該session_id攜帶上來混弥,服務器根據session_id在session庫中獲取用戶的session數據趴乡。就能知道該用戶到底是誰,以及之前保存的一些狀態(tài)信息蝗拿。

2晾捏、將session數據加密,然后存儲在cookie中哀托。這種專業(yè)術語叫做client side session惦辛。flask采用的就是這種方式,但是也可以替換成其他形式仓手。

cookie和session的區(qū)別

cookie數據存放在客戶的瀏覽器上胖齐,session數據放在服務器上。

cookie不是很安全嗽冒,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙考慮到安全應當使用session呀伙。

session會在一定時間內保存在服務器上。當訪問增多添坊,會比較占用你服務器的性能考慮到減輕服務器性能方面剿另,應當使用COOKIE。

單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie雨女。因此使用cookie只能存儲一些小量的數據谚攒。

所以個人建議:

將登陸信息等重要信息存放為SESSION

其他信息如果需要保留,可以放在COOKIE中

Cookie和Session的方案雖然分別屬于客戶端和服務端氛堕,但是服務端的session的實現對客戶端的cookie有依賴關系的馏臭,上面我講到服務端執(zhí)行session機制時候會生成session的id值,這個id值會發(fā)送給客戶端讼稚,客戶端每次請求都會把這個id值放到http請求的頭部發(fā)送給服務端位喂,而這個id值在客戶端會保存下來,保存的容器就是cookie乱灵,因此當我們完全禁掉瀏覽器的cookie的時候塑崖,服務端的session也會不能正常使用。

cookie和session的區(qū)別:1痛倚、cookie數據存放在客戶的瀏覽器上规婆,session數據放在服務器上。2

1蝉稳、session出現的原因

因為http協(xié)議本身是無狀態(tài)的抒蚜,這樣你本次請求和上次請求無法判斷是不是同一個人操作的。

2耘戚、session的生成方式

瀏覽器在第一次訪問服務器時嗡髓,服務器會創(chuàng)建一個session,然后同時為該session生成一個唯一的會話sessionid收津。然后將sessionid和session存儲到緩存/數據庫中饿这,然后服務器再把sessionid(名字為JSESSIONID的cookie),以cookie形式發(fā)送給客戶端撞秋。

瀏覽器再次訪問時會攜帶cookie中的sessionis长捧,然后服務器根據sessionid找到對應的session進行匹配。

如果瀏覽器禁用了cookie/不支持cookie吻贿,可以通過URL重寫的方式發(fā)送到服務串结。

3、token出現的原因

session的存儲是需要空間的舅列,session的傳輸一般都是通過cookie來傳輸肌割,或url重寫的方式。

token在服務器時可以不用存儲用戶信息的帐要,token傳遞的方式也不限于cookie傳遞把敞,token也可以保存起來。

4宠叼、token的生成方式

瀏覽器第一次訪問服務器時先巴,會傳過來一個唯一表示ID其爵,服務端通過算法冒冬,加密鑰伸蚯,生成一個token。通過BASE64編碼后將token發(fā)送給客戶端简烤。

客戶端將token保存起來剂邮,下次請求帶著token,服務器收到請求會用相同的算法取驗證toekn横侦,如果通過就繼續(xù)執(zhí)行挥萌。

token組成:uid(用戶唯一的身份標識)、time(當前時間的時間戳)枉侧、sign(簽名引瀑,由token的前幾位+鹽以哈希算法壓縮成一定長的十六進制字符串,可以防止惡意第三方拼接token請求服務器)榨馁。還可以把不變的參數也放進token憨栽,避免多次查庫

5、token和session的區(qū)別

共同點:都是保存了用戶身份信息翼虫,都有過期時間屑柔。

session翻譯為會話,token翻譯為令牌珍剑。

session是空間換時間掸宛,token是時間換空間。

session和sessionid:服務器會保存一份招拙,可能保存到緩存/數據庫/文件唧瘾。

token:服務器不需要記錄任何東西,每次都是一個無狀態(tài)的請求别凤,每次都是通過解密來驗證是否合法劈愚。

sessionid:一般是隨機字符串,要到**服務器檢索id的有效性闻妓。**出現請求:服務器重啟餓內存中的session沒了菌羽,數據庫服務器掛了。

為什么要使用token由缆?

一注祖、session的狀態(tài)保持及弊端

當用戶第一次通過瀏覽器使用用戶名和密碼訪問服務器時,服務器會驗證用戶數據均唉,驗證成功后在服務器端寫入session數據是晨,向客戶端瀏覽器返回sessionid,瀏覽器將sessionid保存在cookie中舔箭,當用戶再次訪問服務器時罩缴,會攜帶sessionid蚊逢,服務器會拿著sessionid從數據庫獲取session數據,然后進行用戶信息查詢箫章,查詢到烙荷,就會將查詢到的用戶信息返回,從而實現狀態(tài)保持檬寂。

弊端:

1终抽、服務器壓力增大

通常session是存儲在內存中的,每個用戶通過認證之后都會將session數據保存在服務器的內存中桶至,而當用戶量增大時昼伴,服務器的壓力增大。

2镣屹、CSRF跨站偽造請求攻擊

session是基于cookie進行用戶識別的, cookie如果被截獲圃郊,用戶就會很容易受到跨站請求偽造的攻擊。

3女蜈、擴展性不強

如果將來搭建了多個服務器持舆,雖然每個服務器都執(zhí)行的是同樣的業(yè)務邏輯,但是session數據是保存在內存中的(不是共享的)鞭光,用戶第一次訪問的是服務器1混坞,當用戶再次請求時可能訪問的是另外一臺服務器2庆冕,服務器2獲取不到session信息看幼,就判定用戶沒有登陸過直砂。

二、token認證機制

token與session的不同主要在①認證成功后汹买,會對當前用戶數據進行加密佩伤,生成一個加密字符串token,返還給客戶端(服務器端并不進行保存)

②瀏覽器會將接收到的token值存儲在Local Storage中晦毙,(通過js代碼寫入Local Storage生巡,通過js獲取,并不會像cookie一樣自動攜帶)

③再次訪問時服務器端對token值的處理:服務器對瀏覽器傳來的token值進行解密见妒,解密完成后進行用戶數據的查詢孤荣,如果查詢成功,則通過認證须揣,實現狀態(tài)保持盐股,所以,即時有了多臺服務器耻卡,服務器也只是做了token的解密和用戶數據的查詢疯汁,它不需要在服務端去保留用戶的認證信息或者會話信息,這就意味著基于token認證機制的應用不需要去考慮用戶在哪一臺服務器登錄了卵酪,這就為應用的擴展提供了便利幌蚊,解決了session擴展性的弊端谤碳。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市溢豆,隨后出現的幾起案子蜒简,更是在濱河造成了極大的恐慌,老刑警劉巖沫换,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臭蚁,死亡現場離奇詭異最铁,居然都是意外死亡讯赏,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門冷尉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漱挎,“玉大人,你說我怎么就攤上這事雀哨】牧拢” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵雾棺,是天一觀的道長膊夹。 經常有香客問我,道長捌浩,這世上最難降的妖魔是什么放刨? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮尸饺,結果婚禮上进统,老公的妹妹穿的比我還像新娘。我一直安慰自己浪听,他們只是感情好螟碎,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迹栓,像睡著了一般掉分。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上克伊,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天酥郭,我揣著相機與錄音,去河邊找鬼答毫。 笑死褥民,一個胖子當著我的面吹牛,可吹牛的內容都是我干的洗搂。 我是一名探鬼主播消返,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼载弄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撵颊?” 一聲冷哼從身側響起宇攻,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倡勇,沒想到半個月后逞刷,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡妻熊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年夸浅,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扔役。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡帆喇,死狀恐怖,靈堂內的尸體忽然破棺而出亿胸,到底是詐尸還是另有隱情坯钦,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布侈玄,位于F島的核電站婉刀,受9級特大地震影響,放射性物質發(fā)生泄漏序仙。R本人自食惡果不足惜突颊,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诱桂。 院中可真熱鬧洋丐,春花似錦、人聲如沸挥等。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肝劲。三九已至迁客,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辞槐,已是汗流浹背掷漱。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留榄檬,地道東北人卜范。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像鹿榜,于是被迫代替她去往敵國和親海雪。 傳聞我的和親對象是個殘疾皇子锦爵,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內容