1. 程式人生 > >session和cookie以及jwt(一)

session和cookie以及jwt(一)

大約幾十年前,那時候的web和現在有很大區別,很多網頁就是簡單的靜態網頁,後端伺服器要做的也只是收到請求後相應相應的html文件、圖片。完全不用記得剛剛是誰發了HTTP請求,而30年前的Web 基本上就是文件的瀏覽而已, 既然是瀏覽,我作為一個伺服器, 為什麼要記住誰在一段時間裡都瀏覽了什麼文件呢?

  • session

但是web發展太快了,很快互動式的web應用開始興起,比如論壇、電商網站等等。

HTTP作為無狀態協議,他本身是沒有辦法去維持一個狀態的,比如登陸後再點選其他網頁,他是沒有辦法知道你這次是不是以及登陸的,除非你每次都訪問都post你的使用者和密碼。於是人們就想出了一些辦法來解決這個問題,最先登場的就是session和cookie。

web後端需要完成的是管理會話,要記住哪些人登入了系統,還需要區別使用者和使用者。

session是怎麼做的呢,就是給大家發一個seesion id,一個隨機的唯一字串。把這個字串發給使用者,使用者儲存在cookie中,每次傳送http請求時,順便把seesionid給我,這樣就能識別使用者了。

  • Memcached

有了session之後,問題似乎得到了解決,使用者只需要記得自己的id就行了,但是對於伺服器而言,需要儲存所有人的seesion id。這是一把巨大的開銷,而且嚴重限制了擴充套件能力。

比如,我用兩臺伺服器做了一個小叢集,使用者A通過伺服器A登陸了系統,那sessionid就會儲存在伺服器A上,假設使用者A下一次請求定向到了伺服器B怎麼辦,伺服器B中並沒有使用者A的seesionid。

這時可以用個小魔法,session sticky。你不是有時候要訪問伺服器B嗎,那我就讓你一直訪問伺服器A不就完了。但是這個辦法也不能解決根本的問題。如果伺服器A掛了,還是得訪問伺服器B。

既然這樣,那我把seesion id各存一份在AB之間,這樣是沒有問題。但是一直在AB之間傳輸session也是一筆巨大的開銷,而且如果是很多臺伺服器呢,這怎麼解決。

然後就有了memcached:把所有人的session id 儲存在一個地方,所有的其他伺服器都來訪問這個地方。這樣就不用在每臺伺服器上都儲存所有人的seesionid了。但這樣也有弊端啊,如果這個memcached掛了,那就也沒得搞了。

  • token

然後我們又進化了,既然存session這麼麻煩,那我們不存了,換個方式進行驗證。

首先我們還是發一個token給使用者,裡面有使用者的userid,這樣我收到taoken的時候我就可以知道使用者是誰了。不過這樣有安全問題,所以我們再來做一個簽名。

比如說我用HMAC-SHA256 演算法,加上一個只有我才知道的金鑰,  對資料做一個簽名, 把這個簽名和資料一起作為token ,   由於金鑰別人不知道, 就無法偽造token了。

和session最大的區別是這個token我不儲存。當我收到token時,我再用同樣的HMAC-SHA256 演算法和同樣的金鑰,對資料再計算一次簽名, 和token 中的簽名做個比較, 如果相同, 我就知道使用者已經登入過了,並且可以直接取到使用者的user id ,  如果不相同, 資料部分肯定被人篡改過, 我就告訴傳送者: 對不起,沒有認證。

Token 中的資料是明文儲存的(雖然我會用Base64做下編碼, 但那不是加密), 還是可以被別人看到的, 所以我不能在其中儲存像密碼這樣的敏感資訊。

當然, 如果一個人的token 被別人偷走了, 那我也沒辦法, 我也會認為小偷就是合法使用者, 這其實和一個人的session id 被別人偷走是一樣的。

這樣一來, 我就不儲存session id 了, 我只是生成token , 然後驗證token ,  我用我的CPU計算時間獲取了我的session 儲存空間 !


相關推薦

sessioncookie以及jwt()

大約幾十年前,那時候的web和現在有很大區別,很多網頁就是簡單的靜態網頁,後端伺服器要做的也只是收到請求後相應相應的html文件、圖片。完全不用記得剛剛是誰發了HTTP請求,而30年前的Web 基本上就是文件的瀏覽而已, 既然是瀏覽,我作為一個伺服器, 為什麼要記住誰在一段時

談談分散式Session的幾種實現方式,SessionCookie的區別聯絡以及Session的實現原理

一。分散式Session的幾種實現方式 1.基於資料庫的Session共享 2.基於NFS共享檔案系統3.基於memcached 的session,如何保證 memcached 本身的高可用性?4. 基於resin/tomcat web容器本身的session複製機制5.

為什麼會有session cookie以及兩者的區別

為什麼會有session和cookie技術 當用戶在傳送一個請求關得到返回資訊之後,客戶端與伺服器端之間的網路連線就已經斷開了,在下一個請求傳送時,伺服器無法確定這次請求和上次的請求是否來自同一個客戶端。也就是說,伺服器不能記住”記住”使用者,這是 http

sessioncookie

客戶端 php 使用 關閉瀏覽器 其它 nbsp 取值 字符 默認 1.session  (1)session存儲在服務器的    (2)session每個人存一份  (3)session有默認的過期時間  (4)session裏面可以存儲任意類型的數據 安全,對服

php中sessioncookie的使用及區別

網上商城 標識 禁止 bsp 身份驗證 main str 什麽 ets 1.cookie的使用 什麽是 Cookie? cookie 常用於識別用戶。cookie 是服務器留在用戶計算機中的小文件。每當相同的計算機通過瀏覽器請求頁面時,它同時會發送 cookie。通過

sessioncookie基本操作

基本 size tco arr 結束 style 服務器 清理 方法 session的作用同cookie一樣: 1.在不同頁面使用同一數組 2.實現驗證碼,用戶跟蹤(個人覺得這個用到的其實還是1中的作用) session相對於cookie更加的安全 先來說一下coo

tp5.31,sessioncookie

作用 分享 logs con 技術分享 coo cnblogs src log 一、session: 1.先再config中打開 前綴即為默認作用域。 tp5.31,session和cookie

sessioncookie區別&它們的用法

購物 執行 aaa 用戶數據 啟動 偽造 對象 fun val (一)、區別1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙 考慮到安全應當使用session

關於Sessioncookie個人見解

是否 第一次 != redirect use p s cookie 超過 讀取 背景:因為HTTP是無狀態的協議,這樣我們無法推斷同一個用戶多次請求時記錄用戶的信息從而須要頻繁的身份校驗,包含開啟多個瀏覽器瀏覽同一個站點依然須要不停的都身份驗證。這樣就產生了sess

APPlication,SessionCookie的區別

www expire 日期 unlock 一段時間 enter 應用程序 ica art 方法 信息量大小 保存時間 應用範圍 保存位置 Application 任意大小 整個應用程序的生命期 所有用戶 服務器端 Se

sessioncookie技術對比

正整數 setvalue 註意 如果 tac 類型 技術 同名 銷毀 Cooke技術 1 特點 Cookie技術:會話數據保存在瀏覽器客戶端。

詳談sessioncookie的區別

由於 整型 其他 缺點 時間 set 註銷 應用程序 存儲結構 一、cookie機制和session機制的區別**********************************************************************************

Session Cookie

連接 無法 程序 響應頭 網站 invalid memcach 打開 發送請求 1. HTTP是無狀態協議?   HTTP無狀態協議,是指協議對於事務處理沒有記憶能力。同一個客戶端的這次請求和上次請求是沒有對應關系,對http服務器來說,它並不知道這兩個請求來自同一個客戶端

PHP中的會話控制—sessioncookie(實現數據傳值功能)

代碼 會有 數據 xmlns code 特點 會話控制 pre color 1.session 登錄上一個頁面以後,長時間沒有操作,刷新頁面以後需要重新登錄。 特點:(1)session是存儲在服務器;    (2)session每個人(登陸者)存一份;    (3)

SessionCookie總結

.cn 流程 src () 信息 選擇 cookie 查找 導致 一.Session和Cookie   1.Cookie    1.cookie創建於服務器,保存於瀏覽器,保存了特定網站操作記錄和資料憑證的信息。     2.未設置cookie期限的時候,默認是關閉瀏覽器後

nodejs操作sessioncookie

func init outer coo 引入 ins 準備 require nodejs session: 安裝模塊 cnpm install express-session 引入session註冊到路由 var express = require(‘expres

Java Web 深入分析(9) Session Cookie

等等 常用 log 就是 key set 協議 body 數據 前言: session 和cookie都是為了保持服務器和客戶端之間交互狀態。如果一天的PV有幾億,而一個cookie占200個字節但是也會占用很多帶寬?所以大訪問量就引用session,但是幾百臺服務器集群

博客園項目-登錄(驗證碼,ajax提交數據,sessioncookie)

doc orm valid 對象 導入 [] fse pan () 前端頁面 {% load static %} <!DOCTYPE html> <html lang="zh-CN"> <head> <meta ch

8、Django實戰第8天:sessioncookie自動登錄機制

src exp 密碼登錄 spa 一個 實現 服務器 技術 狀態 因為http是無狀態協議,因此,並不會記錄用戶的登錄狀態。在早期,是直接把用戶名和密碼等信息存儲在瀏覽器的cookie來實現記錄用戶密碼登錄。 但是這樣存在安全隱患,只要別人登錄你的電腦cookie信息,就

基於sessioncookie的登錄驗證(CBV模式)

doc app cookie ret bject project objects onf meta 基於session和cookie的登錄驗證(CBV模式) urls.py """cookie_session URL Configuration The `urlpatt