Express Session的使用

Express Session的使用

Session简单介绍

session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服务器上。

Session的用途:
session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存。
当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截。
session可以和Redis或者数据库等结合做持久化操作,当服务器挂掉时也不会导致某些客户信息(购物车)
丢失。

Session的工作流程

当浏览器访问服务器并发送第一次请求时,服务器端会创建一个session对象,生成一个类似于
key,value的键值对,然后将key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带key(cookie),
找到对应的session(value)。 客户的信息都保存在session中

express-session的使用

1.安装 express-session

cnpm install express-session --save

2.引入express-session

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

3.设置官方文档提供的中间件

app.use(session({
        secret: 'keyboard cat',
        resave: true,
        saveUninitialized: true
    }))

4.使用

设置值 req.session.username = "张三";
获取值 req.session.username

express-session 使用demo:

    /*
    * 1.安装  express-session

    cnpm install express-session  --save
    *
    *
    * 2.引入

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

     3.设置官方文档提供的中间件

     app.use(session({
         secret: 'keyboard cat',
         resave: false,
         saveUninitialized: true
     }))


    4.使用

    设置值
     req.session.username = "张三";

    获取值 req.session.username

    * */

    var express = require("express");
    var app = express();

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

    //配置中间件
    app.use(session({
        secret: 'keyboard cat',
        resave: false,
        saveUninitialized: true
        //cookie: { secure: true }   /*secure https这样的情况才可以访问cookie*/
    }))


    app.get("/",function(req,res){

        //获取sesssion


        if(req.session.userinfo){  /*获取*/
            res.send('你好'+req.session.userinfo+'欢迎回来');

        }else{

            res.send('未登录');
        }



    });

    app.get("/login",function(req,res){


        req.session.userinfo="zhangsan111"; /*设置session*/
        res.send('登录成功');
    });

    app.get("/news",function(req,res){

        //获取sesssion


        if(req.session.userinfo){  /*获取*/
            res.send('你好'+req.session.userinfo+'欢迎回来 news');

        }else{

            res.send('未登录 news');
        }



    });

    app.listen(3000);

express-session的常用参数

这里写图片描述

    app.use(session({
        secret: '12345',
        name: 'name',
        cookie: {maxAge: 60000},
        resave: false,
        saveUninitialized: true
    }));

Session 中间件里面的参数的demo:

    /*
    * 1.安装  express-session

    cnpm install express-session  --save
    *
    *
    * 2.引入

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

     3.设置官方文档提供的中间件

     app.use(session({
         secret: 'keyboard cat',
         resave: false,
         saveUninitialized: true
     }))


    4.使用

    设置值
     req.session.username = "张三";

    获取值 req.session.username

    * */

    var express = require("express");
    var app = express();

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

    //配置中间件
    app.use(session({
        secret: 'this is string key',   // 可以随便写。 一个 String 类型的字符串,作为服务器端生成 session 的签名


        name:'session_id',/*保存在本地cookie的一个名字 默认connect.sid  可以不设置*/
        resave: false,   /*强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false。*/
        saveUninitialized: true,   //强制将未初始化的 session 存储。  默认值是true  建议设置成true
        cookie: {
            maxAge:5000    /*过期时间*/

        },   /*secure https这样的情况才可以访问cookie*/

        //设置过期时间比如是30分钟,只要游览页面,30分钟没有操作的话在过期

        rolling:true //在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)


    }))


    app.get("/",function(req,res){

        //获取sesssion


        if(req.session.userinfo){  /*获取*/
            res.send('你好'+req.session.userinfo+'欢迎回来');

        }else{

            res.send('未登录');
        }



    });

    app.get("/login",function(req,res){


        req.session.userinfo='张三222';
        res.send('登录成功');
    });

    app.get("/news",function(req,res){

        //获取sesssion


        if(req.session.userinfo){  /*获取*/
            res.send('你好'+req.session.userinfo+'欢迎回来 news');

        }else{

            res.send('未登录 news');
        }



    });

    app.listen(3000);

express-session的常用方法

    req.session.destroy(function(err){ /*销毁 session*/
    }) 

    req.session.username='张三'; //设置 session

    req.session.username //获取 session

    req.session.cookie.maxAge=0; //重新设置 cookie 的过期时间

express-session的常用方法的demo:

    /*
     * 1.安装  express-session

     cnpm install express-session  --save
     *
     *
     * 2.引入

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

     3.设置官方文档提供的中间件

     app.use(session({
     secret: 'keyboard cat',
     resave: false,
     saveUninitialized: true
     }))


     4.使用

     设置值
     req.session.username = "张三";

     获取值 req.session.username

     * */

    var express = require("express");
    var app = express();

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

    //配置中间件
    app.use(session({
        secret: 'this is string key',   // 可以随便写。 一个 String 类型的字符串,作为服务器端生成 session 的签名
        name:'session_id',/*保存在本地cookie的一个名字 默认connect.sid  可以不设置*/
        resave: false,   /*强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false。*/
        saveUninitialized: true,   //强制将未初始化的 session 存储。  默认值是true  建议设置成true
        cookie: {
            maxAge:1000*30*60    /*过期时间*/

        },   /*secure https这样的情况才可以访问cookie*/

        //设置过期时间比如是30分钟,只要游览页面,30分钟没有操作的话在过期

        rolling:true //在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)


    }))


    app.get("/",function(req,res){

        //获取sesssion

        if(req.session.userinfo){  /*获取*/
            res.send('你好'+req.session.userinfo+'欢迎回来');

        }else{

            res.send('未登录');
        }



    });

    app.get("/login",function(req,res){


        req.session.userinfo='张三222';
        res.send('登录成功');
    });

    app.get("/loginOut",function(req,res){

        //req.session.cookie.maxAge=0;  /*改变cookie的过期时间*/


      //销毁
        req.session.destroy(function(err){
            console.log(err);
        })
        res.send('退出登录成功');
    });

    app.get("/news",function(req,res){

        //获取sesssion


        if(req.session.userinfo){  /*获取*/
            res.send('你好'+req.session.userinfo+'欢迎回来 news');

        }else{

            res.send('未登录 news');
        }



    });

    app.listen(3000);

负载均衡配置Session,把Session保存到数据库里面

    1.需要安装 express-session 和 connect-mongo 模块
    2.引入模块
    var session = require("express-session");
    const MongoStore = require('connect-mongo')(session);
    3.配置中间件
    app.use(session({
        secret: 'keyboard cat',
        resave: false,
        saveUninitialized: true,
        rolling:true,
        cookie:{
        maxAge:100000
        },
        store: new MongoStore({
        url: 'mongodb://127.0.0.1:27017/student',
        touchAfter: 24 * 3600 // time period in seconds
        })
    }))

Session存储到mongodb中的demo:

/*
     * 1.需要安装 express-session 和 connect-mongo 模块

     cnpm install express-session  --save

     cnpm install connect-mongo  --save


     2.引入

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


     var  MongoStore  = require("connect-mongo")(session);


     3.设置官方文档提供的中间件

     app.use(session({
        secret: 'keyboard cat',
         resave: false,
         saveUninitialized: true,

         store:new MongoStore({
             url: 'mongodb://127.0.0.1:27017/student',数据库的地址
             touchAfter: 24 * 3600   time period in seconds
         })


     }))


     4.使用

     设置值
     req.session.username = "张三";

     获取值 req.session.username

     * */

    var express = require("express");
    var app = express();

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


    var  MongoStore  = require("connect-mongo")(session);

    //配置中间件
    app.use(session({
        secret: 'this is string key',   // 可以随便写。 一个 String 类型的字符串,作为服务器端生成 session 的签名
        name:'session_id',/*保存在本地cookie的一个名字 默认connect.sid  可以不设置*/
        resave: false,   /*强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false。*/
        saveUninitialized: true,   //强制将未初始化的 session 存储。  默认值是true  建议设置成true
        cookie: {
            maxAge:1000*30*60    /*过期时间*/

        },   /*secure https这样的情况才可以访问cookie*/
        rolling:true,//在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)
        store:new MongoStore({
                url: 'mongodb://127.0.0.1:27017/shop',  //数据库的地址
                touchAfter: 24 * 3600   //time period in seconds  通过这样做,设置touchAfter:24 * 3600,您在24小时内只更新一次会话,不管有多少请求(除了在会话数据上更改某些内容的除外)
        })


    }))


    app.get("/",function(req,res){

        //获取sesssion

        if(req.session.userinfo){  /*获取*/
            res.send('你好'+req.session.userinfo+'欢迎回来');

        }else{

            res.send('未登录');
        }



    });

    app.get("/login",function(req,res){


        req.session.userinfo='张三222';
        res.send('登录成功');
    });

    app.get("/loginOut",function(req,res){

        //req.session.cookie.maxAge=0;  /*改变cookie的过期时间*/


      //销毁
        req.session.destroy(function(err){
            console.log(err);
        })
        res.send('退出登录成功');
    });

    app.get("/news",function(req,res){

        //获取sesssion


        if(req.session.userinfo){  /*获取*/
            res.send('你好'+req.session.userinfo+'欢迎回来 news');

        }else{

            res.send('未登录 news');
        }



    });

    app.listen(3000);

Cookie和Session区别

1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。

2、cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗 考虑到安全应当使用 session。

3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用 COOKIE。

4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。

  • 18
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值