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

复制代码


  • 2020-01-10 10:23:08

    父元素设置min-height子元素设置100%问题

    父元素设置min-height子元素高度设置100%取不到值,这是因为子元素 div设置 height:100%;只有当父级元素满足min-height:1000px;设置的条件才触发;浏览器默认是不会触发的,所以子元素的100%的高度继承就失效了。min-height 是在 height 计算之后再套用的.

  • 2020-01-10 15:48:46

    Linux下查看文件精确到秒的修改时间

    今天排查一个BUG遇到一个问题,错误日志中打印的时间精确到秒,但当根据日志中的时间去找对应文件进行验证的时候,发现通过 ls -l 或者 ll 命令,都无法查看到文件精确到秒的修改时间。

  • 2020-01-10 15:55:05

    linux php yum 安装Imagick

    通过pecl安装Imagick扩展,成功到是成功了,很顺利,但是so包并不在我当年用yum安装的php7.2的扩展包内,我把生成的Imagick.so,移动到当前用的php包内,并不能用,提示 undefined symbol: spl_ce_Countable)) in Unknown on line 0。

  • 2020-01-10 15:57:06

    Centos 安装php Imagick 扩展

    yum install ImageMagick ImageMagick-devel ImageMagick-perl 下一步,验证ImageMagick已经安装在你的系统上并验证它的版本

  • 2020-01-10 19:44:45

    window安装ImageMagick没有conver.exe

    你安装 ImageMagick 的时候有几个勾选安装的选项,里面有一个就是convert.exe。可以全勾选上··以防万一。

  • 2020-01-10 21:59:08

    supervisor 永不挂掉的进程 安装以及使用

    在使用Tp的消息队列 think-queue的时候进程意外结束了!导致项目没法运行; 所以用到了supervisor ; 接下来跟大家分享一下自己的使用心得以及安装到使用的方法;

  • 2020-01-10 22:00:23

    又一款内网穿透工具搭建

    最近一个项目需要用到将订单发布到第三方平台,之后要是有人购买他们会请求我们这边的接口来改变订单状态等! 由于本地开发,测试的时候,他们那边请求我们这边接口的时候没法访问内网 所以要用到内网穿透 当然现在也有很多更简单的 比如花生壳就是很好的!

  • 2020-01-13 11:14:43

    p标签中的文本换行显示空白

    white-space: 如何处理元素中的空白,normal: 默认, 被浏览器忽略空白 pre: 空白被浏览器保留. nowrap: 文本不会换行, 会在同一行上继续, 一直走到需要换行为止 pre-wrap: 保留空白符序列, 但正常换行 pre-line: 合并空白符序列, 但正常换行 inherit: 从父元素继承white-space这个属性