Node.js Session 原理簡單介紹 + 示例代碼

目錄

? Session 原理簡要說明

🧩 示例項目 - 使用 Node.js + Express 實現簡單 Session 登錄

📁 文件結構

🔹 server.js (JavaScript)

🔸 index.html (HTML)

?? 程序運行步驟

? 程序運行效果

🎯 總結


在 Web 應用中,我們經常需要“記住”用戶,比如登錄狀態。這種“記住”就是會話管理(Session)

? Session 原理簡要說明

  • Session 是服務器端的機制,用來保存用戶的數據(比如用戶名、權限等)。

  • 每個 Session 會綁定一個唯一的 Session ID。

  • 服務器會把這個 Session ID 發送給客戶端(瀏覽器),一般通過 Cookie 存儲。

  • 瀏覽器下次請求時會自動帶上這個 Session ID,服務器就能識別出這個用戶了。


🧩 示例項目 - 使用 Node.js + Express 實現簡單 Session 登錄

我們來寫一個簡單的登錄系統,登錄成功后記住用戶信息,通過 Session 實現。

📁 文件結構

session-demo/
│
├── server.js         ← Node.js 主程序 (JavaScript)
└── index.html        ← 客戶端頁面 (HTML)

🔹 server.js (JavaScript)

// server.js
const express = require('express');
const session = require('express-session');
const path = require('path');const app = express();// 設置 session 中間件
app.use(session({secret: 'keyboard cat',         // 用于加密 Session ID 的字符串resave: false,saveUninitialized: true,cookie: { maxAge: 60000 }       // Session 有效時間:1分鐘
}));app.use(express.urlencoded({ extended: true }));
app.use(express.static(__dirname));// 登錄接口
app.post('/login', (req, res) => {const { username, password } = req.body;if (username === 'admin' && password === '123456') {req.session.user = username;res.send('登錄成功!歡迎你,' + username);} else {res.send('用戶名或密碼錯誤');}
});// 訪問首頁時檢查是否已登錄
app.get('/welcome', (req, res) => {if (req.session.user) {res.send('你已登錄,歡迎回來,' + req.session.user);} else {res.send('你還沒有登錄,請先登錄');}
});// 退出登錄
app.get('/logout', (req, res) => {req.session.destroy();res.send('你已退出登錄');
});// 啟動服務器
app.listen(3000, () => {console.log('服務器已啟動:http://localhost:3000');
});

🔸 index.html (HTML)

<!-- index.html -->
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>Session 登錄示例</title>
</head>
<body><h2>登錄頁面</h2><form method="POST" action="/login">用戶名:<input type="text" name="username" /><br>密碼:<input type="password" name="password" /><br><button type="submit">登錄</button></form><br><a href="/welcome">查看登錄狀態</a><br><a href="/logout">退出登錄</a>
</body>
</html>

?? 程序運行步驟

  1. 安裝依賴:

npm install express express-session
  1. 啟動服務器:

node server.js
  1. 打開瀏覽器訪問:

http://localhost:3000

? 程序運行效果

  • 打開頁面,輸入 admin / 123456 登錄。

  • 登錄后服務器會設置 Session。

  • 點擊「查看登錄狀態」會顯示歡迎信息。

  • 點擊「退出登錄」后,Session 會被銷毀,再次訪問就會提示未登錄。


🎯 總結

這個例子通過 express-session 管理 Session,幫助你理解:

  • 如何保存登錄狀態

  • Session 是服務器存儲用戶信息,客戶端只保存一個標識(Session ID)

?

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

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

相關文章

實戰交易策略 篇十六:獵豹阿杜打板交易策略

文章目錄 系列文章狙擊漲停板的十大要訣炒股大成者,必具“三商”系列文章 實戰交易策略 篇一:奧利弗瓦萊士短線交易策略 實戰交易策略 篇二:杰西利弗莫爾股票大作手操盤術策略 實戰交易策略 篇三:333交易策略 實戰交易策略 篇四:價值投資交易策略 實戰交易策略 篇五:底部…

Opentelemetry 項目解讀

Opentelemetry 解讀 1. 什么是 Opentelmetry Ot 統一了可觀測的三個重要維度&#xff1a;分別是 Trace&#xff0c;Log&#xff0c;Metrics。 在沒有 ot 之前&#xff0c;不同維度的可觀測組件都是不同的&#xff1a; 在 Trace 領域&#xff1a;skywalking 一直很受歡迎&am…

與終端同居日記:Linux指令の進階撩撥手冊

前情提要&#xff1a; 當你和終端的關系從「早安打卡」進階到「深夜代碼同居」&#xff0c;那些曾經高冷的指令開始展露致命の反差萌—— man 是那個永遠在線的鋼鐵直男說明書&#xff0c;只會說&#xff1a;"想懂我&#xff1f;自己看文檔&#xff01;"&#xff08…

Java 開發玩轉 MCP:從 Claude 自動化到 Spring AI Alibaba 生態整合

摘要 本文以原理與示例結合的形式講解 Java 開發者如何基于 Spring AI Alibaba 框架玩轉 MCP&#xff0c;主要包含以下內容。 1. 一些 MCP 基礎與快速體驗&#xff08;熟悉的讀者可以跳過此部分&#xff09; 2. 如何將自己開發的 Spring 應用發布為 MCP Server&#xff0c;驗…

【面試向】欠擬合和過擬合、正則化(Regularization)

訓練集、驗證集和測試集泛化誤差過擬合&#xff08;Overfitting&#xff09;和 欠擬合&#xff08;Underfitting&#xff09;如何區分過擬合和欠擬合&#xff1f;欠擬合 —— 在訓練集和驗證集上都表現很差過擬合 —— 在訓練集上表現很好&#xff0c;但在驗證集或測試集上表現…

ClawCloud的免費空間(github用戶登錄可以獲得$5元/月的免費額度)

免費的空間 Welcome to ClawCloud Lets create your workspace 官網&#xff1a;ClawCloud | Cloud Infrastructure And Platform for Developers 區域選擇新加坡 然后這個頁面會變成新加坡區域&#xff0c;再按一次確定&#xff0c;就創建好了工作臺。 初始界面&#xff0…

Spring Boot + Caffeine:打造高性能緩存解決方案

1. 引言 1.1 緩存的重要性 緩存是提升系統性能的關鍵技術之一,通過將頻繁訪問的數據存儲在內存中,減少對數據庫或其他外部系統的訪問次數,從而降低延遲并提高吞吐量。 緩存的基本概念:緩存是一種臨時存儲機制,用于快速訪問常用數據。緩存在提升系統性能中的作用:減少數…

每天學一個 Linux 命令(24):chattr

??可訪問網站查看,視覺品味拉滿: http://www.616vip.cn/24/index.html 每天學一個 Linux 命令(24):chattr 命令簡介 chattr(Change Attribute)用于修改文件或目錄的底層屬性(如防刪除、防修改),這些屬性比普通權限更嚴格。常用于保護重要文件或優化文件系統行為。…

【java 13天進階Day04】常用API、正則表達式,泛型、Collection集合API

Math類的使用。 Math用于做數學運算。Math類中的方法全部是靜態方法&#xff0c;直接用類名調用即可。方法&#xff1a; public static int abs(int a) 獲取參數a的絕對值public static double ceil(double a) 向上取整public static double floor(double a) 向下取整public s…

如何系統地入門學習stm32?

如何系統地入門學習stm32&#xff1f; 作為一個在嵌入式領域摸爬滾打十余年的工程師&#xff0c;看到這個問題&#xff0c;我不禁想起自己當年啃著厚重的數據手冊&#xff0c;對著一塊藍色的PCB板冥思苦想的日子。STM32的學習之路&#xff0c;說難不算特別難&#xff0c;說簡單…

考公:數字推理

文章目錄 1.真題12 312 530 756 ()-3 3 1 12 17 ()356 342 333 324 ()30 28 27 25 () 2215105 1494 1383 1272 ()2 3 8 21 46 ()4/25 1/4 4/9 1 ()39 416 630 848 ()5 8 11 17 () 10714 21 40 77 () 229 2.數字推理方法2.1 差值法2.2 比值法&#xff08;乘法關系&#xff09;2.…

自動化測試相關協議深度剖析及A2A、MCP協議自動化測試應用展望

一、不同協議底層邏輯關聯分析 1. OPENAPI協議 OPENAPI 協議核心在于定義 API 的規范結構&#xff0c;它使用 YAML 或 JSON 格式來描述 API 的端點、請求參數、響應格式等信息。其底層邏輯是構建一個清晰、標準化的 API 描述文檔&#xff0c;方便不同的客戶端和服務端進行對接…

2025.04.17【Dendrogram】生信數據可視化:Dendrogram圖表詳解

Dendrogram customization Go further with ggraph: edge style, general layout, node features, adding labels, and more. Customized circular dendrogram Learn how to build a circular dendrogram with proper labels. 文章目錄 Dendrogram customizationCustomized c…

SRS流媒體服務器

SRS流媒體服務器簡介 SRS(Simple RTMP Server)是一個開源的流媒體服務器&#xff0c;主要用于直播和WebRTC場景。以下是關于SRS的關鍵信息&#xff1a; 主要特性 支持多種協議&#xff1a;RTMP、HTTP-FLV、HLS、WebRTC、SRT等低延遲&#xff1a;特別優化了WebRTC和HTTP-FLV的…

R語言之環境清理

有時候 R 環境中殘留的變量可能會導致警告&#xff0c;可以嘗試清理工作空間并重新加載數據。 警告信息: In mget(objectNames, envir ns, inherits TRUE) : 重新評估被中斷的許諾 # 觀察前6行 head(iris)# 觀察數據結構 str(iris)# 探知數據的極值和分位數&#xff0c;以及…

RAG工程-基于LangChain 實現 Naive RAG

摘要 本篇文章以實現簡單的第一范式 RAG-Naive RAG為目標&#xff0c;并最終創建并實現一個基于RAG的論文分析器的項目。 LangChain 文檔加載 文檔加載是 RAG 流程的起點&#xff0c;它負責從各種數據源讀取原始文檔&#xff0c;將其轉化為程序可處理的格式。LangChain 支持多…

Rust網絡編程實戰:全面掌握reqwest庫的高級用法

一、開篇導引 1.1 對比Python Requests解釋為何reqwest是Rust生態的標桿HTTP客戶端 在Python生態中&#xff0c;Requests 庫以其簡潔易用的API成為了HTTP客戶端的首選。它使得開發者能夠輕松地發送各種HTTP請求&#xff0c;處理響應&#xff0c;而無需過多關注底層細節。然而…

k8s中sidecar死循環

序言 怎么發現我的同事們很上進呢&#xff0c;估計做了下賤的事兒吧。 傷不到我&#xff0c;不代表不疼&#xff01; sidecar產生的問題 1 背景 在k8s的環境中&#xff0c;pod的使用越來越多了&#xff0c;也就產生了sidecar容器&#xff0c;在現在的環境中&#xff0c;一個pod…

Day53 二叉樹的層序遍歷

給你二叉樹的根節點 root &#xff0c;返回其節點值的 層序遍歷 。 &#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* T…

C盤清理技巧分享

一、系統級深度清理 1. 存儲感知自動化 路徑:設置 → 系統 → 存儲 → 開啟「存儲感知」配置策略: 臨時文件:每 1-2 周自動清理回收站:超過 30 天自動清空應用緩存:按需求設置清理頻率進階操作:在「高級存儲設置」中關閉「傳遞優化」(減少更新緩存占用)2. 磁盤清理工具…