Cookie, Session, Token,WebStorage你懂多少?

2021-03-06 iTesting
最近遇見一個好玩的bug, 現象是頁面刷新白屏,RootCause是Header裡放的cookie太多了, 大小超出了4kb的限制.解決方法很簡單,拆出一部分放到LocalStorage.問題解決了,但是個人覺得很有意思,平常司空見慣的,覺得"假大空不接地氣"的概念,其實都真真切切的在項目中體現了,只不過我們熟生輕視,看不見而已.遂記錄本文.
面試的時候經常喜歡問一個問題,HTTP協議是有狀態的還是無狀態的?很多同學都不知道,或者簡單背一個答案,曰無狀態.再問,那麼HTTP協議如何保持狀態?只有一小部分同學能答出來要用cookie和session.再問,有了cookie為什麼還要session?更少一部分人能答出來安全。再問,不要cookie行不行?能答出URL重寫的已經不錯了。對於高級的測試,再繼續深入,session保存在伺服器內存中,隨著用戶的增多,伺服器撐不住了怎麼辦?假設我使用了集群服務怎麼辦?這個時候聰明點的就會答sesion sticky, 或者使用Memcached集中所有session id了。但這也帶來另外一個問題,session 伺服器掛了怎麼辦?再弄個集群,有點傻吧,自然的,Token就被帶出來了。然後再問Token一般怎麼生成的啊?伺服器生成,把user id+時間+私密籤名用Base64加密生成,自己保存一份(不放內存放DB, 也可以不保存,那麼收到客戶端id就用加密算法再算一次生成token來對比), 發給客戶端一份。能回答到這裡的已經可以了。接著再順便問一句,token裡能不能保存敏感信息啊?為什麼?(Base64是加密嗎?),什麼是JWTtoken啊?token組成裡的私密籤名,是用什麼加密的啊,順便就把公鑰私鑰給理清楚了。對稱算法,非對稱算法也給考察了。如果有人答到這裡,你還對他不放心的話,再問一句你聽過iTesting嗎?回答聽過的你就收了吧,看我公號的人技術都不會太差:)。HTTP和HTTPS的核心區別是什麼?能答出TCP請求並說出區別是SSL協議的你就收了吧。像什麼get和post的區別,生成一個TCP請求包還是2個就不必要再糾結了, 能研究到這裡的,測試肯定也能幹好。上面說了一堆,看出來了嗎?一個問題考察多個層面並且都有聯繫,平常沒點積累是不行的,我的文章要常常看啊。

cookie 和session的區別

1. cookie放在客戶端的瀏覽器上,session放伺服器上。

2. Session生成的Session id是在cookie裡保存的,cookie被禁止後可以通過URL重寫來繼續使用session

3. cookie不是安全,存放在本地的COOKIE可能被獲取並進行COOKIE欺騙。

4. session會給伺服器帶來壓力,考慮到伺服器性能,應當使用COOKIE。

5. cookie只能保存字符串類型,以文本的方式。session通過類似與Hashtable的數據結構來保存,能支持任何類型的對象(session中可含有多個對象)

6.  單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie, Session大小沒限制。

Token 和Session區別

Cookie有限制,每次請求服務端必須帶上,還有大小不能超過4kb,如果想突破這個限制怎麼辦?

WebStorage

為克服由cookie所帶來的一些限制,當數據無需發回伺服器時使用。

WebStorage兩個主要目標:

HTML5的WebStorage提供了兩種API:

localStorage(本地存儲)

sessionStorage(會話存儲)

這兩種區別在哪裡?

localStorage的生命周期是永久的,關閉頁面或瀏覽器之後localStorage中的數據也不會消失。localStorage除非主動刪除數據,否則數據永遠不會消失。sessionStorage的生命周期是在僅在當前會話下有效。sessionStorage引入了一個「瀏覽器窗口」的概念,sessionStorage是在同源的窗口中始終存在的數據。只要這個瀏覽器窗口沒有關閉,即使刷新頁面或者進入同源另一個頁面,數據依然存在。但是sessionStorage在關閉了瀏覽器窗口後就會被銷毀。同時獨立的打開同一個窗口同一個頁面,sessionStorage也是不一樣的。localStorage和sessionStorage的存儲數據大小一般都是:5MBlocalStorage和sessionStorage都保存在客戶端,不與伺服器進行交互通信。localStorage和sessionStorage只能存儲字符串類型,對於複雜的對象可以使用ECMAScript提供的JSON對象的stringify和parse來處理。localStoragese:常用於長期登錄(+判斷用戶是否已登錄),適合長期保存在本地的數據。sessionStorage:敏感帳號一次性登錄;

Web Storage帶來的好處: 

一旦數據保存在本地之後,就可以避免再向伺服器請求數據,因此減少不必要的數據請求,減少數據在瀏覽器和伺服器間不必要的來回傳遞 。性能好,從本地讀數據比通過網絡從伺服器上獲得數據快得多,本地數據可以及時獲得,再加上網頁本身也可以有緩存,因此整個頁面和數據都在本地的話,可以立即顯示 。很多時候數據只需要在用戶瀏覽一組頁面期間使用,關閉窗口後數據就可以丟棄了,這種情況使用sessionStorage非常方便。注意:WebStorage這部分內容copy自網絡,原創不可考。

眾籌請我喝杯咖啡吧

相關焦點

  • Cookie、Session、Token那點事兒
    2、cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙,考慮到安全應當使用session。3、session會在一定時間內保存在伺服器上。當訪問增多,會比較佔用你伺服器的性能,考慮到減輕伺服器性能方面,應當使用cookie。
  • Cookie、Session、Token講解
    所以是瀏覽器替你管理了Cookie的數據,如果此時你換成了Firefox等其他的瀏覽器,因為Cookie剛才是存儲在Chrome裡面的,所以伺服器又蒙圈了,不知道你是誰,就會給Firefox再次貼上小紙條。
  • session原理終極版-一文弄懂session會話與cookie 秒殺CSDN
    首先我們來看一下瀏覽器保存的cookie長什麼樣子。通過任意抓包工具,抓取一個需要登錄的網站的cookie,如下圖:Session,cookie類似於鍵值對,可以保存你的token,其他一些有用的信息,其本質是存在瀏覽器中的鍵值對字符串。必須要指出的是裡面的信息都是字符串。
  • 會話技術 Cookie和Session
    cookie:   HttpServletRequest.getCookies()  註:不同網站向同一個客戶端寫的cookie的名稱一致,可以通過cookie的path屬性進行區分    cookie的默認存活時間是會話範圍。
  • 一篇故事看懂從 session-cookie 到 JWT 的技術演變
    怎麼沒聽過這號人物」「我也沒見過,等等看吧」session-cookie時代到底是什麼問題,讓我們兄弟幾個如此著急上火?事情還得從多年以前說起······那時候,這倆兄弟還沒來,就我一個web伺服器,每天處理的不過是一些靜態資源文件,像HTML、CSS、JS、圖片等等,日子過的清閒自在。
  • 淺談Cookie與Session技術
    四、session技術(伺服器端)(1)什麼是session?a、session是一種伺服器端的狀態管理技術。b、session是基於cookie的技術。且session也是通過cookie來實現發送到瀏覽器內存中的。所以可以考慮用cookie來替換該session。如果用戶在中途關閉瀏覽器的話,那麼session就隨著瀏覽器內存的釋放而釋放,那麼如果想持久化session的話,可以考慮使用cookie技術。Step1、獲取sessionID。
  • 關於Cookie與session會話技術的示例
    session中取出數據為用戶服務。,當保存此cookie後 關於此項目的每次請求都會在請求頭攜帶cookie信息因為我們並沒有在代碼中設置cookie的保存時間,所以當瀏覽器關閉的時候cookie會自動清除
  • 一篇理解cookie、session、localStorage和sessionStorage
    試題6: 在chrome上登陸的cookie,safari會帶上cookie嗎?解決上面6個問題,首先要依此了解cookie、session、localStorage和sessionStorage的各個用法:1. Cookie是伺服器發送到用戶瀏覽器並保存在本地的一小塊數據。2.
  • session和cookie魅力所在
    實現Web應用的技術核心http協議是一個無狀態的協,為了讓Web應用開發保持狀態,就出現了保持http連結的狀態的兩種技術:一個是cookie技術,另一個是session技術。cookie技術是客戶端解決方案(HTML5之後有了更好的替代品),其主要的特點是,伺服器發給客戶端的特殊信息以文本的形式存放在客戶端,之後客戶端每次向服務端發送請求時都會帶上這些信息。
  • cookie和session原來還有這樣的關係
    就是說,在沒有cookie之前,你第一次訪問這個頁面和第二次訪問這個頁面,伺服器是不知道的,不知道前一次是你。那麼問題來了,我怎麼登錄,登錄成功後,刷新下,伺服器就不認識我了,不展示我的信息了,這怎麼能行,於是cookie就產生了,cookie是存在客戶端的,最常見的就是瀏覽器了,你第一次訪問頁面的時候,伺服器會返回個cookie給你,這個cookie其實就是sessionId,並存於客戶端,第二次的時候,你刷新頁面的時候,瀏覽器就會帶上之前的cookie,cookie就像通行證,每人一個,無論誰訪問都必須攜帶自己通行證
  • session與cookie引發的一個小故事
    首先加載頁面時去得到驗證碼,後臺將驗證碼數字存入到session中,然後在登陸時把前端傳入的驗證碼數字同後臺取出的碼進行比較,比較之前首先把原來的session移除掉。若相同則驗證通過,不同則驗證不通過然後重新請求。這個流程本來是沒有什麼問題的,然而自己突然想到這裡會不會有點問題呢?session在並發時會不會出現覆蓋的情況呢?然後就動手開始測試。
  • PHP技巧:關於cookie和session的分析
    1.1 設置cookie:可以用 setcookie() 或 setrawcookie() 函數來設置 cookie。也可以通過向客戶端直接發送http頭來設置.1.1.1 使用setcookie()函數設置cookie:bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly]]]]]] )name: cookie變量名value: cookie
  • 面試題: 聊聊 session 和 cookie 的區別
    set-cookie, 是服務端專門用來設置 cookie 的:一個 set-cookie 只能設置一個 cookie , 當你想設置多個, 需要添加同樣多的 set-cookie服務端可以設置 cookie 的所有選項: expires,  domain,  path,  secure,  HttpOnlyCookie 的分類會話級別 Cookie
  • 淺談cookie,sessionStorage,localStorage
    優點,缺點和瀏覽器支持和 Local Storage 一樣sessionStorage、localStorage、cookie都是在瀏覽器端存儲的數據,其中sessionStorage的概念很特別,引入了一個「
  • localStorage、sessionStorage有什麼區別?
    對比cookie:cookie會與伺服器通信;storage只存在客服端,不參與伺服器通信;同樣受同源策略影響,只有在域名一致的情況下才能查看到對應的數據;navigator.cookieEnabled檢測是否啟用了cookie,也就說cookie
  • (建議收藏)|Spring Boot集成JSON Web Token(JWT)
    HttpSession session = request.getSession();session.setAttribute("user", user);// 讓瀏覽器保存sessionid到cookie中// Cookie cookie
  • [接口測試_B] 09 requests中Cookie和會話對象session處理
    因此,cookie和session存在的作用是進行狀態管理。1)、在客戶端給服務端發送請求後,服務端會根據請求信息生成session,同時生成一個session_id,通過cookie返回給客戶端;2)、客戶端再次向服務端發送請求時,會通過cookie將這個session_id發送給服務端,這樣就對上了session的暗號。
  • Springboot中登錄後關於cookie和session攔截案例
    2、每次登錄的時候都要進資料庫校驗下帳戶名和密碼,只是加了cookie 或session驗證後;比如登錄頁面A,登錄成功後進入頁面B,若此時cookie過期,在頁面B中新的請求url到頁面c,系統會讓它回到初始的登錄頁面。(類似單點登錄sso(single sign on))。
  • 網站安全公司告訴您什麼是session安全
    這一部分內容的重中之重是session和cookie,客戶在安全使用app系統時,如何根據客戶的身份提供不同的功能和相關數據,每個人都有這樣的體驗。例如,訪問淘寶,不會把自己喜歡的商品加入別人的購物車,如何區分不同的客戶?打開任何網站,抓住包看,cookie的欄位都存在。
  • Session
    你可以嘗試將瀏覽器的cookie功能關閉,你會發現將無法在京東登錄和購物。為了實現連接狀態的保持功能,網站會通過用戶的瀏覽器在用戶機器內被限定的硬碟位置中寫入一些數據,也就是所謂的Cookie。通過Cookie可以保存一些諸如用戶名、瀏覽記錄、表單記錄、登錄和註銷等各種數據。