一、session 的概念
session 是一种跨请求的机制,用于存储用户信息及操作,通过保存session 变量,用户在访问网站的不同页面时能够保持登录状态并且在不同页面间传递数据。session 是一种服务器端的状态保持方式,即为每个会话分配一个唯一的 id,然后通过将 id 保存在客户端(一般是保存在客户端的 cookie 里)上,来实现服务器端和客户端的通信和跟踪。对于每个新的会话,都会创建一个新的 id 来进行跟踪。
在 web 开发中,session 可以用于优化安全性、提高用户体验、实现用户具体需求等等。
二、session 在 node.js 中的使用
在 node.js 中,有个常用的 session 模块 express-session,它可以向 express 应用程序添加会话支持。我们不妨了解下其使用方法:
1、安装 express-session 模块
在命令行中输入以下命令:
npm install express-session
2、在项目中引入 express-session:
在你的项目中,添加以下代码:
var express = require('express');var session = require('express-session');var app = express();
3、使用 express-session 中间件
在你的项目中,添加以下代码:
app.use(session({secret: 'keyboard cat',//secret的值建议使用随机字符串cookie: { maxage: 60000 },resave: true,saveuninitialized: true}))
其中:
secret 是 session id 加密用的密钥,可以随意设定cookie 中的 maxage 是定义 session id 的有效期resave:true 表示每次请求都重新存储 session,无论其是否改变。saveuninitialized:true 表示用户未登录,每次请求都重新设置 session 与 cookie4、进行 session 的设置和获取
在你的项目中,你可以通过以下代码来进行 session 的设置和获取:
设置:
req.session.username="tom";
获取:
var username = req.session.username;
接下来,我们将结合示例来具体讲解如何在 node.js 中获取请求 session 信息。
三、具体 api 信息
为了更好地了解如何获取请求 session 信息,我们先来了解下 session 在 node.js 中对应的 api。
req.session
这是 session 的请求中间件,它可以通过写入 req.session 实现对话控制。使用示例为:
req.session.username='xiaoming';
以上代码实现了将 username 加入到 session 中。在 express 中,对话信息保存在 session 中,这是一个对象,可以像操作普通 javascript 对象一样对它进行操作。
req.session.destroy
该属性表示当用户退出时,将 session 中保存的数据清除。使用示例为:
req.session.destroy(function(err) { // cannot access session here})
当 session 销毁时,回调函数将会被执行。
四、示例演示
接下来,我们通过一个示例来演示如何获取请求 session 信息。
1、创建项目
首先,初始化项目并创建 main.js 文件:
mkdir node-app && cd node-appnpm inittouch main.js
2、安装 express 和 express-session 并引入
在命令行中输入以下命令安装 express 和 express-session 并引入:
npm install express --savenpm install express-session --save
在 main.js 中写入以下代码:
const express = require('express')const session = require('express-session')const app = express()app.use(session({ secret: 'keyboard cat',//secret的值建议使用随机字符串 cookie: { maxage: 60000 }, resave: true, saveuninitialized: true}))app.get('/login', (req, res) => { req.session.username = 'qiming' res.send('login success')})app.get('/home', (req, res) => { let username = req.session.username if (username) { res.send(`welcome ${username}`) } else { res.send('please login first') }})const server = app.listen(3000, () => { console.log(`app is running at http://localhost:${server.address().port}`)})
上面的代码中:
首先引入 express 和 express-session 模块创建应用 app 对象,并在中间添加 session 中间件当访问 /login 时,将用户名存储在 req.session.username 中当访问 /home 时,尝试从 req.session 中获取 username ,如果存在则欢迎,并给予消息,否则提示用户先登录应用启动时监听在 3000 端口上,输出启动的日志信息3、运行项目并测试
在终端中运行以下命令:
node main.js
打开浏览器,访问 http://localhost:3000/login ,得到 “login success” 消息,访问 http://localhost:3000/home ,得到 “welcome qiming” 信息,说明 session 获取成功。
五、总结
在本文中,我们了解了 session 的概念、session 在 node.js 中的使用、具体 api 信息和一个演示示例,希望能帮助大家更好地了解如何在 node.js 中获取请求 session 信息。在实际的项目中,如何使用 session 需要根据实际情况来决定,可以根据业务需求来实现。
以上就是nodejs获取请求session的详细内容。
