NodeJs(四)-----node中的session

本文深入解析了session的工作原理,包括其与cookie的区别,如何在服务器端存储用户状态信息,以及使用express-session模块在Node.js环境中设置和操作session的具体方法。
什么是session
  • session是另一种记录客户状态的机制,与cookie保存在客户端浏览器不同,session保存在服务器当中;
  • 当客户端访问服务器时,服务器会生成一个session对象,对象中保存的是key:value值,同时服务器会将key传回给客户端的cookie当中;当用户第二次访问服务器时,就会把cookie当中的key传回到服务器中,最后服务器会把value值返回给客户端。
  • 因此上面的key则是全局唯一的标识,客户端和服务端依靠这个全局唯一的标识来访问会话信息数据。
设置session

使用express-session模块来设置session

  • 安装express-session

    npm install express-session --save

  • 引入express-session模块

    const session=require("express-session");

  • 设置session

    session(options);

  • 代码:

// 引入express-session模块
const express=require("express");
const session=require("express-session");

var app=express();
//配置中间件
app.use(session({
  secret:"keyboard cat",
  resave:false,
  saveUninitialized:true,
  cookie:('name','value',{maxAge:5*60*1000,secure:false})
}));

app.use('/login',function(req,res){
  //设置session
  req.session.userinfo='张三';
  res.send("登陆成功!");
});

app.use('/',function(req,res){
  //获取session
  if(req.session.userinfo){
      res.send("hello "+req.session.userinfo+",welcome");
  }else{
      res.send("未登陆");
  }
});
app.listen(8080);

在session(option)中对session进行设置,它的主要参数是:

  • name - cookie的名字(原属性名为 key)。(默认:’connect.sid’)
  • store - session存储实例
  • secret - 用它来对session cookie签名,防止篡改
  • cookie - session cookie设置 (默认:{ path: ‘/‘, httpOnly: true,secure: false, maxAge: null })
  • genid - 生成新session ID的函数 (默认使用uid2库)
  • rolling - 在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
  • resave - 强制保存session即使它并没有变化 (默认: true, 建议设为:false)
  • proxy - 当设置了secure cookies(通过”x-forwarded-proto” header )时信任反向代理。当设定为true时,
    ”x-forwarded-proto” header 将被使用。当设定为false时,所有headers将被忽略。当该属性没有被设定时,将使用Express的trust proxy。
  • saveUninitialized - 强制将未初始化的session存储。当新建了一个session且未设定属性或值时,它就处于未初始化状态。在设定一个cookie前,这对于登陆验证,减轻服务端存储压力,权限控制是有帮助的。(默认:true)
  • unset - 控制req.session是否取消(例如通过 delete,或者将它的值设置为null)。这可以使session保持存储状态但忽略修改或删除的请求(默认:keep)
session的常用方法
req.session.username="张三"
 
//获取session
req.session.username
 
//重新设置cookie的过期时间
req.session.cookie.maxAge=1000;
 
//销毁session
req.session.destroy(function(err){
     
})

以下演示通过销毁session的方式来退出登录:

const express=require("express");
const session=require("express-session");
 
var app=express();
//配置中间件
app.use(session({
    secret: "keyboard cat",
     resave: false,
     saveUninitialized: true,
     cookie: ('name', 'value',{ maxAge:  5*60*1000,
                                secure: false,
                                name: "seName",
                                resave: false})
}));
app.use('/login',function(req,res){
    //设置session
    req.session.userinfo='张三';
    res.send("登陆成功!");
});
app.use('/loginOut',function(req,res){
    //注销session
    req.session.destroy(function(err){
        res.send("退出登录!"+err);
    });
}); 
app.use('/',function(req,res){
    //获取session
    if(req.session.userinfo){
        res.send("hello "+req.session.userinfo+",welcome to index");
    }else{
        res.send("未登陆");
    }
});
app.listen(8080);

当我们进入到主页时,未显示任何信息,进入login路由后,自动设置session,这是回到主页则显示session信息,之后进入loginOut路由已注销session信息,再回到首页显示为登陆。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值