Express-session的使用

2020-04-03 19:13:05

参考地址 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 

1
cnpm install express-session --save

 

2.引入 express-session

1
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',
cookie: {maxAge: 60000},
resave: false,
saveUninitialized: true }));

复制代码

参数

作用

secret

一个 String 类型的字符串,作为服务器端生成 session 的签名。

name

返回客户端的 key 的名称,默认为 connect.sid,也可以自己设置。

resave

强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false。 don't save session if unmodified

saveUninitialized

强制将未初始化的 session 存储。当新建了一个 session 且未设定属性或值时,它就处于


未初始化状态。在设定一个 cookie 前,这对于登陆验证,减轻服务端存储压力,权限控制是有帮助的。(默 认:true)。建议手动添加。

cookie

设置返回到前端 key 的属性,默认值为{ path: ‘/’, httpOnly: true, secure: false, maxAge: null }。

rolling

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


express-session 的常用方法:

req.session.destroy(function(err) { /*销毁 session*/ })
req.session.username='张三'; //设置 session 
req.session.username //获取 session 
req.session.cookie.maxAge=0; //重新设置 cookie 的过期时间


负载均衡配置 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
})
}))

复制代码

Cookie 和 Session 区别

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

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

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

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

 

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);

复制代码

复制代码

/*
 * 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);

复制代码

复制代码

/*
 * 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);

复制代码


  • 2019-11-19 01:24:01

    使用JAVA8 filter对List多条件筛选

    记录项目开发的过程中遇到的一些问题及解决方法,由于公司操作数据库都是统一使用工具生成的存在一些多表查询模糊查询,这些操作只能在集合方面下手了,比如发送邮件记录方面查询,对用户的名字及邮件模糊检索 年龄匹配查询。

  • 2019-11-21 18:13:08

    如何在vue单页应用中使用百度地图

    百度开发者平台已经封装了基于vue的地图组件,详细使用,请参考官网: https://dafrok.github.io/vue-baidu-map/#/zh/start/installation 网上有一些是直接在index.html页面全部引用的,本人强烈反对此种使用方式,因为我们项目是组件化的单页应用,强行引入多页应用的开发方式,会破坏整个项目的框架,严重影响性能。有些甚至还在vue单页应用中引入jquery,感觉这都是一些反人类的骚操作,不到万不得已,不建议使用。

  • 2019-11-25 17:04:10

    Throttle 和 Debounce 的本质及一个简单的实现

    Throttle,Debounce 就不把这两个词翻译成中文了,直接解释他们的概念。实际上这两个东西本质上是一样的,作用都是「为了避免某个『事件』在『一个较短的时间段内』内连续被触发从而引起的其对应的『事件处理函数』不必要的连续执行」。那么区别在哪呢?

  • 2019-11-25 17:05:44

    js实现 throttle 和 debounce,节流,防抖详解

    throttle 节流:drag改变浏览器大小,触发onresize函数,实现拖动每过1秒输出一次,不足1秒,1秒后输出一次。多用于高频操作,如抢票、抢购等,无论点击多少次,只固定间隔执行一次,以减轻压力。debounce防抖:drag改变浏览器大小,触发onresize函数,实现拖动停顿1秒输出。多用于输入框,当某一次输入后停顿满n秒才会去触发远程搜索。

  • 2019-11-25 17:37:01

    百度地图GeoUtils示例

    百度地图JavaScript开源库,是一套基于百度地图API二次开发的开源的代码库。目前提供多个lib库,帮助开发者快速实现在地图上添加Marker、自定义信息窗口、标注相关开发、区域限制设置、几何运算、实时交通、检索与公交驾车查询、鼠标绘制工具等功能。