之前有使用过微软的ASP.NET/ASP,可以通过Global.asax(global.asa)文件的Session_Start和Session_End事件来侦听Session的创建和销毁动作。 但在PHP和Node.js里就没有这样的机制。
想了解一下,Node.js里是如何实现的。
还有,如果将Session通过Mongoose存储在MongoDB里(如下方代码所示),interval: 120000需要怎样理解?这里所说的120秒的过期时间是如何起算的?是闲置120秒(120秒内没有向服务器提交任何新的请求),还是说无论页面是否闲置,120秒后就一定过期?个人有疑虑,感觉Node.js的会话机制与ASP.NET有所不同。尤其是将会话存储在MongoDB或是Redis这样的NoSQL数据库时,系统应该很难感知到用户会话会因闲置过久而超时过期。
还有,存储在MongoDB里的Session如何在MongoDB里进行查询?
var connect = require(‘connect’); var SessionStore = require(“session-mongoose”)(connect); var store = new SessionStore({ url: "mongodb://localhost/session", interval: 120000 });
个人是新手,对Node.js了解的实在太少,也不知我的问题有没有描述清楚,还望各位能不吝赐教。 多谢!!!
《Nodejs开发指南》中的Microblog示例项目中有简单使用Session以及使用Mongodb存储Session的内容,可以网上找一找开源的Microblog学习项目看看,比如:https://github.com/tonyzhan/microblog
@RanHuang 多谢指点! 您提供的实例资料对于初学者很有用。 只是这些资料,似乎还没有完全涉及到有关会话的超时机制(也许是我看得还不够细致)。 另外,我还想了解,如果将Session存储在MongoDB中,如何能在MongoDB里利用这个NoSQL数据库的查询机制查找到相应的Session资料(给出的实例似乎也没有涉及到。)。
再次感谢您的帮助!
找到几个参考网址(以备后续参考): 一个mongodb存储session的模块 https://www.npmjs.org/package/connect-mongo http://www.senchalabs.org/connect/session.html https://www.npmjs.org/package/express-session-mongo http://docs.mongodb.org/manual/tutorial/expire-data/
另外,不使用session-mongoose也能将session存储在MongoDB里,而且还可以设定会话过期时间: 参考网址: Session lifetime in node.js with express and MongoDB
再提供一个网址顺便了解一下Nodejs基础中间件Connect,这里也有提及Session的使用: http://blog.fens.me/nodejs-connect/
根据我的理解,120 * 2 秒后就一定过期,但时间不确定。
尤其是将会话存储在MongoDB或是Redis这样的NoSQL数据库时,系统应该很难感知到用户会话会因闲置过久而超时过期。
系统是有感知的。
session-mongoose 这个库会开个 workder 去定时检测。
可以用MONGODB - TTL 索引 创建一个过期会话
db.foo.ensureIndex({lastTime:1}, {expireAfterSecs:60*60})
对于活跃用户,每一次访问更新该字段的最新值。
当然首先,你需要一个md5或者sha1来加密存储用户session id
@alsotang 想确认一下,如果是用户在指定的时间里始终处于活动状态(有向服务器提交新的请求),那么在该用户提出请求之后,系统会重新计算过期时间吗?还是,不管用户在指定的时间里有没有向服务器提出新的请求,系统一律忽略,到时间就视作过期?
多谢解答!