Cookie和Session在Node.JS中的實踐(二)

来源:https://www.cnblogs.com/wljqds/archive/2018/09/25/session.html
-Advertisement-
Play Games

Cookie和Session在Node.JS中的實踐(二) cookie篇在作者的上一篇文章 "Cookie和Session在Node.JS中的實踐(一)" 已經是寫得算是比較詳細了,有興趣可以翻看,這篇是session篇,重點在討論seesion的特性、概念,以及session和cookie的區別 ...


Cookie和Session在Node.JS中的實踐(二)

cookie篇在作者的上一篇文章Cookie和Session在Node.JS中的實踐(一)已經是寫得算是比較詳細了,有興趣可以翻看,這篇是session篇,重點在討論session的特性、概念,以及session和cookie的區別和聯繫。

之前有人問我,這個問題有必要長篇大論的探討嗎?其實只要我覺得這個技術點重要而且具有迷惑性,就值得去寫、去探討,否則你很難完全明白。寫這種文章有兩個好處:

  1. 首先,於作者而言,寫出來文章讓大家一起理解某個技術這本身就是一種考驗,如果作者的觀點、看法是正確的那麼這樣能加深作者自己對技術點的理解;如果錯了,明眼人會指出錯誤,一起討論、理解。
  2. 再者,於讀者而言,作者覺得只要讀者能從文章中獲得新的知識,那這篇文章的價值也就發揮出來了。作者也經常去看別人寫的文章,通過別人的見解,可以快速理解某個技術。

如果想聰明,請犯錯。
如果不成功,那就再試一試。——《一萬小時天才理論》

session

COOKIE存在於客戶端,而SESSION存在於服務端,並且SESSION需要COOKIE的支持。
2018-09-23-19-08-16

session是存在於服務端的信息管理機制,它把客戶端信息以某種信息形式記錄在伺服器中,客戶端再次訪問只需要從session中查找用戶的狀態就可以了

session運行機制

session的運行機制是這樣的,當程式需要為某個客戶端的請求創建一個seesion時,伺服器會首先檢查這個客戶端的請求中的cookie是否含有session標識符(很多人把他叫session_id)。
考慮兩種檢查結果:
1.包含session標識符並且沒有過期,則表示伺服器已經對這個客戶端創建了session,而伺服器只需按照session_id把session檢索出來使用。

2018-09-25-11-46-16

2.不包含seesion標識符或已過期,則需要新創建一個session並且生成與這個session相關聯的session_id返回給客戶端保存。

2018-09-25-11-45-28

session存在的必要性

session存在的必要性,很少文章談到這個,作者一開始一直都在想這個問題:

使用純客戶端中的cookie就能完成會話保持,為什麼需要服務端的session?

先來看這個例子:在一個瀏覽器中登錄博客園,通過開發工具獲得了cookie並複製,在另一個瀏覽器中打開博客園(退出登錄狀態下),然後把複製好的cookie都填入該瀏覽器中,刷新,你會發現這個瀏覽器居然是已經是登錄狀態了。(作者親測例子,讀者自行測試具體截圖不放了,若操作有問題評論區解決)

只要盜取了cookie,就能劫持session。同樣的道理,如果單使用cookie,那麼也是一樣只要盜取了cookie就能做到冒充登錄。既然盜取了cookie,無論是session還是cookie都一樣會被冒充,那為什麼需要session呢?

作者為了明白這個問題,花了很多時間才弄明白,沒文化真闊怕。其實session存在的必要性可以從以下幾點說明:
1.用session只需要在客戶端保存一個id,實際上大量數據都是保存在服務端。如果全部用cookie,數據量大的時候客戶端是沒有那麼多空間的。
2.cookie只是實現session的其中一種方案。雖然是最常用的,但並不是唯一的方法。還有URL等其他方式
3.全部在客戶端保存,服務端無法驗證,這樣偽造和仿冒會更加容易。(偽造一個隨機的id很難,但偽造另一個用戶名是很容易的)
4.全部保存在客戶端,那麼一旦被劫持,全部信息都會泄露
5.客戶端數據量變大,網路傳輸的數據量也會變大

其實,在當下的開發中,都是結合二者使用的。

總結

COOKIE存在於客戶端,而SESSION存在於服務端,並且SESSION需要COOKIE的支持。session是存在於服務端的信息管理機制,它把客戶端信息以某種信息形式記錄在伺服器中,客戶端再次訪問只需要從session中查找用戶的狀態就可以了

session和cookie間的區別和聯繫:

  1. 最大的區別,session在服務端,cookie在客戶端。
  2. 最大的聯繫,session需要cookie,完成一個會話需要兩者結合。
  3. session比cookie要更安全。
  4. 單cookie數據不能超過4K,另外瀏覽器可能會限制單個站點的cookie數量。而session在服務端沒有此類限制。

考慮到後面會使用NODE.JS作為寫session和cookie的實踐,所以把文章分成3部分最好——cookie篇、session篇、NODE.JS實踐篇。這樣,讀者可以按需去看,寫NODE.JS可以看我下一篇的文章,不會NODE的可以跳過了。
下次,NODE.JS見。


如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!

Reference

  1. https://blog.csdn.net/fangaoxin/article/details/6952954
  2. http://blog.51yip.com/php/938.html
  3. https://www.cnblogs.com/shiyangxt/articles/1305506.html

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、前言 MySQL :是用於管理數據的軟體 MySQL是一種關係資料庫管理系統,關係資料庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。 分為服務端和客戶端(也是基於C/S架構的程式) 服務端: socket服務端 本地文件操作 解析指令(SQL語句) ...
  • pymysql的下載和使用 該模塊本質就是一個套接字客戶端軟體,使用前需要事先安裝,能夠讓我們在 Python程式中操作資料庫. pymysql模塊的下載: 在Python安裝文件中找到scripts文件 shift+右鍵打開powershell,接著如下圖: pymysql的使用 (數據均已存在) ...
  • 索引rebuild與rebuild online區別 1.0目的,本篇文檔探討索引rebuild 與 rebuild online的區別 2.0猜測:已有的知識 2.1對索引rebuild重建會對錶申請TM4級表鎖,將會影響業務修改數據,而對索引進行rebuild online則不影響業務修改數據, ...
  • 旭日Follow_24 的CSDN 博客 ,全文地址請點擊: https://blog.csdn.net/xuri24/article/details/80963801 慢查詢日誌概念 MySQL的慢查詢日誌是MySQL提供的一種日誌記錄,它用來記錄在MySQL中響應時間超過閥值的語句,具體指運行時 ...
  • 旭日Follow_24 的CSDN 博客 ,全文地址請點擊: https://mp.csdn.net/postedit/80910082 索引概念: 索引是關係資料庫中用於存放每一條記錄的一種對象,主要目的是加快數據的讀取速度和完整性檢查。建立索引是一項技術性要求高的工作。一般在資料庫設計階段的與數 ...
  • Android中的構架模式一直是一個很hot的topic, 近年來Architecture components推出之後, MVVM異軍突起, 風頭正在逐漸蓋過之前的MVP. 其實我覺得MVP還是有好處的, 比如靈活多變(其實只是我用起來更熟悉順手一些吧). 個人是沒有什麼偏見的, 關於項目的構架,... ...
  • 線性佈局線性佈局LinearLayout是最常用的佈局,顧名思義,它下麵的子視圖像是用一根線串了起來,所以其內部視圖的排列是有順序的,要麼從上到下垂直排列,要麼從左到右水平排列。排列順序只能指定一維方向的視圖次序,可是手機屏幕是個二維的平面,這意味著還剩另一維方向需要指定視圖的對齊方式。故而線性佈局 ...
  • 開篇呢,先給大家問個好,今天是中秋節,祝大家中秋節快樂!!雖然是中秋節,但是木有回家還是總結一下知識點寫寫博客吧,想著昨天總結一下的,但是昨天和幾個同學小聚了一下,酒逢知己總是千杯少呢,喝的微醺不適合寫東西,所以就留到今天總結了。因為這段時間在工作中陸陸續續的接觸到了一些RN開發的東西,還是需要總結 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...