欢迎光临
我们一直在努力

Express.06 Session概念与使用

文章目录

session是一种记录客户状态的机制,与cookie保存在客户端浏览器不同,session保存在服务器中,当客户端访问服务器时,服务器会生成一个session对象,对象中保存kye/value值,同时服务器会将key传回给客户端的cookie中,当用户第二次访问服务器时,就会吧cookie当中的key传回到服务器中,最后服务器会把value返回给客户端上。

设置session

在express中使用 express-session 设置 session

  • 安装 express-session
npm i express-session --save
  • 引入express-session
const session = require('express-session')
  • 设置 session
session(option)

session设置案例:

const express = require('express')
const session = require('express-sesion')
const app = express()
app.use(session({
  secret: 'hasjkd$%@13',    //给cookie进行加盐,也就是混淆,让其更安全。
  name : 'sessionid',        //可以改变cookie的name , 默认是 : connect_sid
  resave: false,            // 不去重复生成cookie
  saveUninitialized: true,   //在不初始化session时候,创建cookie
  cookie: {
    maxAge : 1000 * 60 * 60  // 超过一小时就过期
  }   // secure : true 表示https
}))
app.use('/login',(req,res)=>{
    req.session.username = 'sry'
    res.send('登录成功')
})
app.use('/',(req,res)=>{
    if(req.session.username){
        res.send('hellow'+req.session.username)
    }else{
        res.send('未登陆')
    }
})

app.listen(3000)

session主要参数:

1. name - cookie的名字(原属性名为 key)。(默认:’connect.sid’)
2. store - session存储实例
3. secret - 用它来对session cookie签名,防止篡改
4. cookie - session cookie设置 (默认:{ path: ‘/‘, httpOnly: true,secure: false, maxAge: null })
5. genid - 生成新session ID的函数 (默认使用uid2库)
6. rolling - 在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
7. resave - 强制保存session即使它并没有变化 (默认: true, 建议设为:false)
8. proxy - 当设置了secure cookies(通过”x-forwarded-proto” header )时信任反向代理。当设定为true时,
”x-forwarded-proto” header 将被使用。当设定为false时,所有headers将被忽略。当该属性没有被设定时,将使用Express的trust proxy。
9. saveUninitialized - 强制将未初始化的session存储。当新建了一个session且未设定属性或值时,它就处于未初始化状态。在设定一个cookie前,这对于登陆验证,减轻服务端存储压力,权限控制是有帮助的。(默认:true)
10. 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信息,再回到首页显示为登陆。

赞(0) 打赏
未经允许不得转载:散人研 » Express.06 Session概念与使用
分享到: 更多 (0)

评论 抢沙发

6 + 2 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏