一、代码
var express = require('express');// 首先引入 express-session 这个模块var session = require('express-session');var app = express();app.listen(5000,function(res){console.log('listening');});// 按照上面的解释,设置 session 的可选参数app.use(session({secret: 'recommand 128 bytes random string', // 建议使用 128 个字符的随机字符串cookie: { maxAge: 60 * 1000 },name: 'session_id'}));app.get('/', function (req, res) {// 检查 session 中的 isVisit 字段// 如果存在则增加一次,否则为 session 设置 isVisit 字段,并初始化为 1。if(req.session.isVisit) {//req.session.isVisit++;res.send('<p>第 ' + req.session.isVisit + '次来此页面</p>');} else {req.session.isVisit = 1;res.send("欢迎第一次来这里");console.log(req.session);}});
二、此处写下自己的测试结果
Cookie
概述:
在HTTP协议中,制定了Cookie机制,用于实现客户端和服务器之间的状态共享,
Cookie是解决HTTP无状态性的有效手段,服务器可以设置(set-cookie)或读取cookie中所包含的信息
实现原理:
客户端第一次请求:服务器端如果需要记录用户信息(就是用户需要存session 如:$SESSION['username'] = 'test'), 才会在响应信息中返回 Set-cookie 响应头,如果没有存入用户信息,也就是没有session操作时,不会返回Set-cookie响 应头。当然再次访问页面时,会在请求头中,带上cookie,如图二
如图一:
当第一次访问时,有服务器对session赋值操作,所以响应头会返回set-cookie.,我们再次访问时,继续看图
图二、
由于服务器没有对session进行操作,所以响应头也就没有设置set-cookie。
session存入Redis中(持久化存储)
connect-reids 是一个 Redis 版的 session 存储器,使用node_redis作为驱动。借助它即可在Express中启用Redis来持久化你的Session.
npm install connect-redis
参数
- client 你可以复用现有的redis客户端对象, 由 redis.createClient() 创建
- host Redis服务器名
- port Redis服务器端口
- socket Redis服务器的unix_socket
可选参数
- ttl Redis session TTL 过期时间 (秒)
- disableTTL 禁用设置的 TTL
- db 使用第几个数据库
- pass Redis数据库的密码
- prefix 数据表前辍即schema, 默认为 "sess:"
var express = require('express');var app = express();app.listen(5000,function(res){console.log('listening');});var session = require('express-session');var redis = require('redis');var redisClient = redis.createClient('6379', '127.0.0.1');var RedisStore = require('connect-redis')(session);app.use(session({secret:'signkey',store:new RedisStore({client:redisClient}),resave:false,saveUninitialized:false,name:'session_id'}));//测试app.use(function (req,res,next) {if(!req.session){return next(new Error('error'));}next();});app.get('/', function (req, res) {// 检查 session 中的 isVisit 字段// 如果存在则增加一次,否则为 session 设置 isVisit 字段,并初始化为 1。if(req.session.isVisit) {req.session.isVisit++;req.session.username = 'test';res.send('<p>第 ' + req.session.isVisit + '次来此页面</p>');} else {req.session.isVisit = 1;res.send("欢迎第一次来这里");console.log(req.session);}});
这样session就会转移到redis数据库中, 为什么可以保证持久化呢,因为express服务器突然重启时,用户仍然可以使用当前Cookies里的sessioniD、从数据库获取他的会话状态,做到会话不丢失,提高了网站的健壮性
本文介绍了如何使用Express框架配置session中间件,并将其与Redis结合实现持久化的会话管理。通过设置session参数,确保了用户的会话状态即使在服务器重启后也能保持不变。
791

被折叠的 条评论
为什么被折叠?



