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.mzph.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. 磁盘清理工具…