美文网首页
Express系列(六)

Express系列(六)

作者: 笑红尘123 | 来源:发表于2019-12-07 20:43 被阅读0次

    session

    一、什么是session?

    session是另一种记录客户状态的机制,与cookie保存在客户端浏览器不同,session保存在服务器当中;当客户端访问服务器时,服务器会生成一个session对象,对象中保存的是key:value值,同时服务器会将key传回给客户端的cookie当中;当用户第二次访问服务器时,就会把cookie当中的key传回到服务器中,最后服务器会吧value值返回给客户端。因此上面的key则是全局唯一的标识,客户端和服务端依靠这个全局唯一的标识来访问会话信息数据。

    二、设置session

    安装:

    npm install express-session --save
    

    引入:

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

    设置

    session(options);
    

    demo:

    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:  90000,secure: false})
    }));
     
    app.use('/login',function(req,res){
        //设置session
        req.session.userinfo='tom';
        res.send("登陆成功!");
    });
     
    app.use('/',function(req,res){
        //获取session
        if(req.session.userinfo){
            res.send("hello "+req.session.userinfo+",welcome");
        }else{
            res.send("未登陆");
        }
    });
     
    app.listen(3000);
    

    session(option)中对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="tom"
    //获取session
    req.session.username
     
    //重新设置cookie的过期时间
    req.session.cookie.maxAge=9000000;
    //销毁session
    req.session.destroy(function(err){
         
    })
    

    demo:退出登陆

    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:  900000,
                                    secure: false,
                                    name: "seName",
                                    resave: false})
    }));
     
    app.use('/login',function(req,res){
        //设置session
        req.session.userinfo='tom';
        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(3000);
    

    如果感觉有帮助留下一个宝贵的赞或者给小编一个赞赏!!!

    相关文章

      网友评论

          本文标题:Express系列(六)

          本文链接:https://www.haomeiwen.com/subject/npzugctx.html