zoukankan      html  css  js  c++  java
  • node exprss-session 和connect-mongo

    let express = require('express');
    let session = require('express-session');
    let app = new express();
    let MongoStore = require('connect-mongo')(session);
    app.use(session({
        secret:'keyboard cat', //加密字符串也可以写数组
        resave:true,     //强制保存session 建议设置成false
        saveUninitialized:true,  //强制保存未初始化的内容
        rolling:true, //动态刷新页面cookie存放时间
        cookie:{maxAge:10000}, //保存时效
        store:new MongoStore({   //将session存进数据库  用来解决负载均衡的问题
            url:'mongodb://127.0.0.1:27017/db06',
            touchAfter:24*3600 //通过这样做,设置touchAfter:24 * 3600,您在24小时内
           //只更新一次会话,不管有多少请求(除了在会话数据上更改某些内容的除外)
        })
    }))
    app.get('/login',(req,res)=>{
        req.session.userinfo = 'admin';
        res.send('存储成功');
    })
    app.get('/',(req,res)=>{
        if(req.session.userinfo){
            res.send('欢迎'+req.session.userinfo+'回来');
        }else{
            res.send('请登录');
        }
    })
    app.listen(3000,()=>{
        console.log('start');
    })
    一、Session 简单介绍
    session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服
    务器上。
    Session 的用途:
    session 运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存。
    当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截。
    session 可以和 Redis 或者数据库等结合做持久化操作,当服务器挂掉时也不会导致某些客户信息(购物车)
    丢失。
    二、Session 的工作流程
    当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于
    key,value 的键值对,然后将 key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie),
    找到对应的 session(value)。 客户的信息都保存在 session 中
    三、express-session 的使用
     
    1.安装 express-session
    npm 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 的常用参数:
    app.use(session({
    secret: '12345', 加密字符串 随便写
    name: 'name', 生成session 的key名 默认为 connect.sid 可以不设置
    cookie: {maxAge: 60*1000}, 根据cookie设置过期时间 session在浏览器中保存的时间
    resave: false, 强制保存session 默认为 true。建议设置成 false
    saveUninitialized: true 强制将未初始化的 session 存储 默认为 true。建议设置成true
    req.session 不给值 值为false 不设置 值为true 就默认设置
    req.session 给值 值为false和true没什么区别
    rolling:true 在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false) 建议设置true
    设置过期时间如果是2分钟,如果在2分钟内一直操作(访问)浏览器页面,最后一个访问结束后的2分钟在让过期
    }));
     
    五、express-session 的常用方法
    req.session.destroy(function(err) { /*销毁 session*/
    })
    req.session.username='张三'; //设置 session
    req.session.username //获取 session
    req.session.cookie.maxAge=0; //重新设置 cookie 的过期时间
    六、负载均衡配置 Session,把 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/db06',
    touchAfter: 24 * 3600 // 通过这样做,设置touchAfter:24 * 3600,您在24小时内只更新一次会话,不管有多少请求(除了在会话数据上更改某些内容的除外)
    })
    }))
    七、Cookie 和 Session 区别
    1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
    2、cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗
    考虑到安全应当使用 session。
    3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
    考虑到减轻服务器性能方面,应当使用 COOKIE。
    4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Sublime Text3 python自动补全问题——Sublime Text3安装Anaconda插件
    微信小程序如何刷新当前界面
    No 'Access-Control-Allow-Origin' header is present on the requested resource——Web Api跨域问题
    云时代架构阅读笔记四——线程池是如何使我们的应用变快的?
    jQuery实现图片放大镜效果
    云时代架构阅读笔记三——架构师比程序员厉害在哪里?
    Ajax学习系列——jQuery中Ajax的请求方式
    读书笔记:梯度是怎么消失的
    读书笔记:初始化神经网络
    读书笔记:对抗过拟合
  • 原文地址:https://www.cnblogs.com/l8l8/p/9317069.html
Copyright © 2011-2022 走看看