我像用node express3.0搭了一个注册登录用的网站,写了简单的界面,用mongoose来做数据库。
然后问题来了,登录之后是用Session来记录的,那么在服务器端记录的session是存在内存中,还是存在mongo数据库中?
存在mongo中是不是应该用到require(‘session-mongoose’)?
小白想问一下session到底是怎么用的,有没有好一点的例子。看了一堆博客表示他们写得大多太乱了……
有没有大神提供小工程借我参考一下~
如果要持久就存数据库中
你理解得都对。资料还是看博客吧
参考我的git吧。刚好在写这个例子。https://github.com/eeandrew/CookieAndSession 为什么还用express3.0?
@eeandrew 赞!!!确实可以用呀!想问一下,之后的时间控制又是怎么做到的?
@spasserby 什么时间控制? session的有效期通过cookie里的maxAge或者expires设置
app.use(session({
secret : 'my secret',
cookie : {maxAge:3000}, //这里设置session有效期
store: new mongoStore({
db : db.connection.db,
collection : config.sessionCollection
})
}));
mongoose没分钟会从数据库里删除过期信息,所以sessions集合里的数据不用你管理
@eeandrew 我发现了一个小问题,我把 {maxAge:3000}从3000改到30000,确实有效, 但改回3000却要把mongo里的data都删掉才有效?
@eeandrew 顺便问一下,整个过程是在什么时候req.cookies会不为空 我在req.session.Visit =1后输出req.cookies是空的 而且得到的cookies输出,格式是{‘connect.sid’ : ‘s: %%%%%%%%%%%%%%%’}格式的 这个我如果想手动存到mongo应该怎么做?
@spasserby 你好像没弄清cookie和session的区别和联系。 第一个问题:你需要把浏览器的cookie清理后再做测试 第二个问题:req.session.isVisit=1这部分是针对用户首次访问,这时浏览器里还没有存储这个网页cookie,因此为空 第三个问题:sid已经在mongo里了,否则怎么找到session数据呢?所以你不要手动存。实在是想存,可以这样 req.session.connect_sid = req.cookies.connect.sid。就可以了。不需要手动操作mongo。 不过你还是先把cookie和session弄弄清楚吧