node express session

在express4.0版本以上,需要单独增加session模块:express-session:https://www.npmjs.com/package/express-session

 

具体做法是,在app.js中

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

// 设置session:不明白为什么需要设置这两个属性?
var sess = {
  secret: 'keyboard cat',
  cookie: {}
}

app.use(session(sess));

然后再routes,controllers,models中就可以使用

req.session.wj = 'sfp';

console.log(req.session.wj);

 

 使用:在app中引入后,在其他页面直接使用,不用再引入了。

 

session的存储:

如果没有存在数据库中,而且使用了supervisor,则一旦修改,则会重启服务,session会消失;

如果存在mongodb中,而且使用了supervisor,则一旦修改,就算重启服务,session还是会保存下来。

 

官网教程:https://github.com/expressjs/session

默认是内存存储;上线之后,要存入到数据库中。

session()的属性

cookie:path,httponly, secure, maxAge

secure:true->https

secure:false->http, trust proxy

genid

name:同一主机(hostname+port),需用name区分session

proxy

resave: 如果有touch,则设false;否则设true,一般为true

rolling:false

saveUninitialized:

secret:store, unset

方法:regenerate destory reload save touch(跟新maxAge的属性)

属性:req.session.id req.session.cookie req.sessionID

存储到数据库

 

场景:进行单元测试,访问注册页,如果没登陆的话,跳到login;登陆的话,才能正常返回。现在测试访问注册页,一般来说需要两次请求,但实际上一次就能搞定。

解决办法:

1、app.use(function(){
   req.session.user= req.cookie('mock_user'); 
})
这里需要express-session;cookie-parse
2、request.set('cookie', ''), 首先执行 1 middleware,session中就有值了,/register能通过,然后正常返回。

 

posted on 2015-09-27 09:21  j.w  阅读(282)  评论(0编辑  收藏  举报