node會話管理詳解(cookie、session、token)

在Node.js中,cookie、session和token都是用于會話管理的機制,但它們各自有不同的使用場景和特性。

一、cookie

命令:npm install cookie-parser -save

-save 參數表示將這個模塊添加到項目的 package.json 文件的 dependencies 部分,這樣在其他人克隆你的項目或者在不同的機器上設置項目時,可以通過運行 npm install 命令來自動安裝所有必要的依賴。它可以用到任意命令上

cookie-parser是一個常用的中間件,用于解析請求頭中的cookie字段,并將其轉換為可在Express應用中使用的對象。

(1)概念與原理:

Cookie是一種服務器保存在瀏覽器端的文本信息,通過HTTP請求自動傳遞給服務器,用于識別用戶身份和維持會話狀態。它通常用于跟蹤用戶的會話狀態或保存用戶偏好。

(2)優缺點:

優點:實現簡單,無需在服務器端存儲狀態信息,適用于輕量級的狀態維護。

缺點:大小受限(通常是4KB)。 安全風險,如跨站腳本攻擊(XSS)。 敏感信息不應存儲在cookie中。

(3)代碼示例(使用Express框架):

const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser());
app.get('/', (req, res) => {// 設置cookieres.cookie('username', 'JohnDoe');res.send('Cookie has been set');
});
app.get('/check', (req, res) => {// 讀取cookieconst username = req.cookies.username;res.send(Welcome back, ${username}!);
});
app.listen(3000, () => {console.log('Server is running on port 3000');
});

二、session

命令:npm install express-session -save

express-session是另一個流行的中間件,用于在Express應用中處理會話。它會自動管理會話數據的存儲、會話ID的生成以及與客戶端的通信(通常是通過cookie)。

(1)概念與原理:

Session是基于服務器的會話管理機制。服務器為每個會話創建一個唯一的ID,并將其發送給客戶端(通常通過cookie)。客戶端在后續的請求中攜帶這個ID,以便服務器識別用戶的會話。

(2)優缺點:

優點:可以在服務器端存儲任意大小的數據。安全性較Cookie高,因為敏感信息存儲在服務端

缺點:需要服務端支持,增加服務器的存儲和管理開銷;如果用戶量大,可能會對服務器性能產生影響。

(3)代碼示例(使用Express和express-session中間件):

const express = require('express');
const session = require('express-session');
const app = express();
app.use(session({*secret: 'your-secret-key', //用于簽名session ID的密鑰,可以隨意設置,但需要保密。resave: false, //強制將未修改的session保存到存儲中。如果設置為true,即使session沒有改變,也會被強制保存saveUninitialized: true, //強制將未初始化的session保存到存儲中。如果設置為true,即使session是新的(未被修改過),也會被強制保存cookie: { // cookie用于配置與會話相關的cookie屬性secure: false  //指定是否僅通過HTTPS連接發送cookie,生產環境中應設置為true*maxAge:1000*60*10 //十分鐘。定義cookie的最大存活時間,以毫秒為單位。在這個例子中,maxAge被設置為十分鐘,即10分鐘后cookie將過期。......}
}));
app.get('/', (req, res) => {// 設置session數據req.session.username = 'JohnDoe';res.send('Session has been set');
});
app.get('/check', (req, res) => {// 讀取session數據const username = req.session.username;res.send(Welcome back, ${username}!);
});
app.listen(3000, () => {console.log('Server is running on port 3000');
});

(4)session屬性:

req.session.id // 保存唯一的會話id值,不可修改
req.session.cookie // 以鍵值對的形式保存cookie的原始數據
req.session.cookie.maxAge // 以毫秒的形式返回剩余存活時間
req.sessionID // 保存唯一的會話id,只讀
req.session.鍵名  //保存或獲取鍵名下保存的數據

(5)session方法:

req.session.regenerate(function(err) {// 調用這個方法重新生成一個新的會話,完成后觸發
})
req.session.destroy(function(err) {// 刪除這個會話,完成后觸發。常用。
})
req.session.reload(function(err) {// 從新加載session數據,完成后觸發回調
})
req.session.save(function(err) {// 使用當前內存中的數據保存到儲存器中// 默認在會話結束的時候就會自動調用這個方法
})

三、token

命令:npm install jsonwebtoken -save

jsonwebtoken是一個庫,用于生成和驗證JWT。你可以使用它來在客戶端和服務器之間安全地傳遞信息,而無需使用session。

(1)概念與原理:

Token是基于令牌的身份驗證方法,通常用于無狀態的身份驗證和授權。用戶通過用戶名和密碼登錄后,服務器生成一個Token返回給客戶端,客戶端后續請求時帶上這個Token以驗證用戶身份。

(2)優缺點:

優點:無狀態:服務器不需要存儲會話數據,因此可以更容易地擴展和部署。 安全性高:使用加密算法保護令牌內容。可以設置過期時間等

缺點:令牌管理和驗證邏輯可能比較復雜。 若Token泄露,可能導致安全問題。

(3)代碼示例(使用JSON Web Tokens):

const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
// 假設有一個驗證用戶憑據的函數
const authenticateUser = (username, password) => {// 在這里實現你的驗證邏輯...return username === 'JohnDoe' && password === 'password123';
};
app.post('/login', (req, res) => {const { username, password } = req.body;if (authenticateUser(username, password)) {// 生成JWT令牌const token = jwt.sign({ username }, 'your-secret-key', { expiresIn: '1h' });res.json({ token });} else {res.status(401).send('Invalid credentials');}
});
app.get('/protected', verifyToken, (req, res) => {// 驗證令牌后,訪問受保護的資源res.send('Protected resource');
});
// 令牌驗證中間件
const verifyToken = (req, res, next) => {const token = req.headers['authorization'];if (!token) return res.status

四、應用場景

如果是簡單的Web應用,可能使用Cookie就足夠了;若是大型或分布式系統,可能需要考慮Session或Token。

安全要求:評估不同方案的安全性,選擇符合安全標準的方法。

性能需求:考慮服務器的負載能力和用戶的并發訪問量,選擇對服務器影響較小的方案。

開發成本:不同的方案實現難度和維護成本不同,需要綜合考慮。 總的來說,對于Node.js項目,建議優先考慮使用Session進行會話管理,因為它既保證了安全性又相對容易實現。同時,結合實際情況考慮使用Token或Cookie作為補充。在選擇會話管理機制時,需要綜合考量安全性、可擴展性、性能及開發成本等因素,以確保項目的順利實施和長期維護。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21035.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21035.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21035.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言| 輸出菱形*

C語言| 輸出*三角形-CSDN博客 輸出菱形。 【分析思路】 學會輸出*的三角形之后輸出菱形就很簡單了。我們分析一下,菱形是由兩個對稱的三角形組成的,也因為是對稱的,所以輸出的菱形的行數肯定是一個奇數。 1 我們在編程的時候,要…

基于卷積-小波神經網絡的SAR圖像海冰變化檢測方法(MATLAB R2018A)

海冰是冰凍圈的重要組成部分,海冰的變化信息對航行安全和自然資源開采等非常重要,許多船舶沒有加固防冰設備,因此,必須避開所有的冰區。尤其當冰壓很高時,即使破冰船也很難在冰層中前行。為了安全航行,獲取…

leetCode.89. 格雷編碼

leetCode.89. 格雷編碼 題目思路 代碼 class Solution { public:vector<int> grayCode(int n) {vector<int> res(1,0); // n 0時&#xff0c;之后一位0while (n--) {// 想要實現對象超下來&#xff0c;就從末尾開始&#xff0c;讓vector里面 加 元素for (int i …

Stable Diffusion Webui--安裝與使用

最近進行的課程匯報&#xff0c;學習了2023年的CVPR文章《DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation》&#xff0c;因此嘗試使用了幾種方法對這篇文章的工作進行了一定的復現。本文主要介紹Stable Diffusion Web UI(webui)的安裝…

【因果推斷python】10_分組和虛擬變量回歸1

目錄 分組數據回歸 分組數據回歸 并非所有數據點都是一樣的。 如果我們再次查看我們的 ENEM 數據集&#xff0c;相比小規模學校的分數&#xff0c;我們更相信規模較大的學校的分數。 這并不是說大型學校更好或什么&#xff0c; 而只是因為它們的較大規模意味著更小的方差。 i…

bootstrap5-學習筆記1-容器+布局+按鈕+工具

參考&#xff1a; Bootstrap5 教程 | 菜鳥教程 https://www.runoob.com/bootstrap5/bootstrap5-tutorial.html Spacing Bootstrap v5 中文文檔 v5.3 | Bootstrap 中文網 https://v5.bootcss.com/docs/utilities/spacing/ 之前用bootstrap2和3比較多&#xff0c;最近用到了5&a…

SRE視角下的DevOps構建之道

引言&#xff1a; 隨著數字化時代的飛速發展&#xff0c;軟件成為了企業競爭力的核心。為了更高效地交付高質量的軟件&#xff0c;DevOps&#xff08;Development和Operations的組合&#xff09;作為一種文化、實踐和工具集的集合&#xff0c;逐漸成為了行業內的熱門話題。然而…

OpenFHE 使用樣例

參考文獻&#xff1a; 編譯 OpenFHEOpenFHE 源碼解析&#xff1a;PKE 部分[ABB22] Al Badawi A, Bates J, Bergamaschi F, et al. Openfhe: Open-source fully homomorphic encryption library[C]//Proceedings of the 10th Workshop on Encrypted Computing & Applied Ho…

渲染100為什么是高性價比網渲平臺?渲染100邀請碼1a12

市面上主流的網渲平臺有很多&#xff0c;如渲染100、瑞云、炫云、渲云等&#xff0c;這些平臺各有特色和優勢&#xff0c;也都聲稱自己性價比高&#xff0c;以渲染100為例&#xff0c;我們來介紹下它的優勢有哪些。 1、渲染100對新用戶很友好&#xff0c;注冊填邀請碼1a12有3…

【CTF MISC】XCTF GFSJ0008 low Writeup(LSB隱寫+QR Code識別)

low 暫無 解法 用 StegSolve 打開&#xff0c;Green plane 1 中疑似隱藏有二維碼。 使用大佬寫的代碼&#xff1a; from PIL import Imageimg Image.open("./low.bmp") img_tmp img.copy() pix img_tmp.load() width, height img_tmp.size for w in range(wid…

每日一題——Python實現PAT甲級1046 Shortest Distance(舉一反三+思想解讀+逐步優化)

一個認為一切根源都是“自己不夠強”的INTJ 個人主頁&#xff1a;用哲學編程-CSDN博客專欄&#xff1a;每日一題——舉一反三Python編程學習Python內置函數 Python-3.12.0文檔解讀 目錄 我的寫法 專業點評 優點 改進建議 時間復雜度分析 空間復雜度分析 總結 我要更…

Python模塊導入的寫法

關于Python模塊導入的寫法有 相對路徑導入 和 絕對路徑導入 兩種不同的導入路徑的寫法。 文章目錄 相對路徑導入絕對路徑導入總結 相對路徑導入 from .utils import upblock2d, crossattn_upblock2d使用了相對導入&#xff0c;以&#xff08;“.”&#xff09;開頭這種導入方…

HCIP-Datacom-ARST自選題庫__MAC【14道題】

一、單選題 1.缺省情況下&#xff0c;以下哪種安全MAC地址類型在設備重啟后表項會丟失? 黑洞MAC地址 Sticky MAC地址 安全動態MAC地址 安全靜態MAC地址 2.華為交換機MAC地址表中的動態sticky MAC地址的默認老化時間是多少秒? 300 不會老化 400 500 3.華為交換機MA…

【BeyondCompare官方免費版下載鏈接】

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、BeyondCompare官方免費版下載鏈接 前言 該軟件用于比較兩個文本或文件夾之間的不同之處&#xff0c;查看代碼修改時非常好用。 一、BeyondCompare官方免費…

Polar Web【簡單】login

Polar Web【簡單】login 本文旨在記錄此題的探索和解決過程。 Contents Polar Web【簡單】login探索&思路EXP (python)結果&總結 探索&思路 查看源碼&#xff0c;發現存在用戶信息泄露。嘗試用獲取信息登錄&#xff0c;顯示成功&#xff0c;但其后沒有可做的操作。…

有損線、上升邊退化與材料特性(七)

有損線的不良影響 當信號沿著實際有損線傳輸時&#xff0c;高頻分量的幅度減小&#xff0c;而低頻分量的幅度保持不變。由于這個種選擇性的衰減&#xff0c;信號的帶寬降低&#xff0c;信號的上升邊會增長。如果上升邊的退化與單位間隔比很小&#xff0c;同位模式將比較穩定與…

Django視圖與路由:打造你的網絡帝國

Hello&#xff0c;我是阿佑&#xff0c;上期給大家講了 Django ORM魔法&#xff1a;用Python代碼召喚數據庫之靈&#xff01; 今天將帶大家深入探討了視圖的工作原理、如何編寫高效的函數視圖和類視圖&#xff0c;以及如何巧妙地利用URL路由來提升應用的用戶體驗和可維護性。通…

最新h5st(4.7.2)參數分析與純算法還原(含算法源碼)

文章目錄 1. 寫在前面2. 加密分析3. 算法還原 【&#x1f3e0;作者主頁】&#xff1a;吳秋霖 【&#x1f4bc;作者介紹】&#xff1a;擅長爬蟲與JS加密逆向分析&#xff01;Python領域優質創作者、CSDN博客專家、阿里云博客專家、華為云享專家。一路走來長期堅守并致力于Python…

操作系統 實驗29 同步與互斥

1、并發線程同步與互斥 源程序&#xff1a; #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <string.h> int num30,count10; pthread_mutex_t mylockPTHREAD_MUTEX_INITIALIZER; void *sub1(voi…

圖解 Python 編程(10) | 錯誤與異常處理

&#x1f31e;歡迎來到Python的世界 &#x1f308;博客主頁&#xff1a;卿云閣 &#x1f48c;歡迎關注&#x1f389;點贊&#x1f44d;收藏??留言&#x1f4dd; &#x1f31f;本文由卿云閣原創&#xff01; &#x1f4c6;首發時間&#xff1a;&#x1f339;2024年6月2日&…