美文网首页Node.js
使用express-session报错expires undif

使用express-session报错expires undif

作者: 11bcd20e8892 | 来源:发表于2017-11-21 11:00 被阅读14次

作者使用express-session时出现错误expires字段未定义,检查源码发现此是插件下store.js文件下的87行出问题,

检测得到sess为字符串类型,所以作者将sess转为json对象了,在87行处添加sess=JSON.parse(sess);即可。

Store.prototype.createSession=function(req,sess){

    sess=JSON.parse(sess);

    var expires=sess.cookie.expires

    ,orig=sess.cookie.originalMaxAge;

    sess.cookie=newCookie(sess.cookie);

    if('string'==typeofexpires)sess.cookie.expires=newDate(expires);

         sess.cookie.originalMaxAge=orig;

        req.session=newSession(req,sess);

        returnreq.session;

};

有出现同样错误的朋友可以试一试。

作者所有express-session版本号为1.15.6

附上使用express-session的后端代码,供学习。

const express=require('express');

const expressSession=require('express-session');

const session=require('connect-session');

const mysql=require('mysql');

const cookieParser=require('cookie-parser');

const cookieSession=require('cookie-session');

var MySQLStore =require('connect-mysql')(expressSession);

//连接数据库,保持连接

const pool=mysql.createPool({

  connectionLimit : 300, //连接池最多可以创建连接数

  host:'localhost',

  user:'root',

  password:'123456',

  database:'test',

  queueLimit:8 // 队伍中等待连接的最大数量,0为不限制。

});

var options={

  pool:pool

};

//创建服务器

const server=express();

server.listen(8888,(err)=>{

if(err)

throw new err;

else

console.log('成功监听8888端口。');

});

//cookie、session

server.use(cookieParser('fsafgs4324rfrt34edfg5'));//签名

var sessionArr=[];

for(var i=0;i<10000;i++)

    sessionArr.push('key_'+Math.random().toString().replace('.',''));

    server.use(expressSession({

        secret:'fsafgs4324rfrt34edfg5',

        name:'my_session_id',

        cookie:{maxAge:24*3600*1000},

        resave: false,

        saveUninitialized: true,

        keys:sessionArr,

        store: new MySQLStore(options),

}));//24小时

setInterval(function(){

    pool.getConnection((err,connect)=>{ 

          if(err){ 

                 console.log(err);

                 throw err; 

          }else{ 

                  var sql=`DELETE from sessions WHERE expires>0 AND expires<UNIX_TIMESTAMP()`;

                 connect.query(sql,(err)=>{

                       connect.release();

                       if(err){

                            console.log(err);

                            throw err;

                        }

              });

        }

    });

},180*000);  //每半个小时检查过期的session并删除

server.post('/session',(req,res)=>{

     req.session['time']=new Date().toString();

     res.send(req.session['time']);

});

server.post('/session2',(req,res)=>{

    console.log(req.session['time'])

    res.send(req.session['time']);

});

//静态文件放置位置,即根目录

server.use(express.static('./www'));

相关文章

  • 使用express-session报错expires undif

    作者使用express-session时出现错误expires字段未定义,检查源码发现此是插件下store.js文...

  • 基于Nest.JS开发认证服务

    介绍@nest-middlewares/express-session组件使用 This is the Nest ...

  • express框架下express-session实现用户登录状

    express-session 的使用: 1.安装 express-sessioncnpm install exp...

  • express-session使用

    Redis是一个非常适合用于Session管理的数据库。第一,它的结构简单,key-value的形式非常符合Ses...

  • express-session使用

    Redis是一个非常适合用于Session管理的数据库。第一,它的结构简单,key-value的形式非常符合Ses...

  • 使用express-session

    1. 运行命令npm install express-session --save 2. 在app.js文件中新增代码

  • 前端缓存

    前端缓存 http缓存 Expires HTTP1.0的内容,服务器使用Expires头来告诉Web客户端它可以使...

  • HTTP 缓存

    强缓存 HTTP/1.0 使用的是 Expires 字段,HTTP/1.1 使用的是 Cache-Control ...

  • 身份认证

    一,在 Express 中使用 Session 认证 1. 安装 express-session 中间件 在 Ex...

  • 其他

    使用 HTTP2 使用缓存强缓存Expires: Wed, 22 Oct 2018 08:41:00 GMTCac...

网友评论

    本文标题:使用express-session报错expires undif

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