不通过框架 实现session 有相关的资料吗? 想学习下…
expressjs/session 自己去实现一个sessionstore
这是一段基于cookie实现session的简单代码,还有很多地方不完善,可以参考express的实现
var sessions = {}; var session_key = 'freemind_session'; var EXPIRES = 20 * 60 * 1000; //生成session的代码 var generate = function(){ var session = {}; session.id = (new Date()).getTime() + Math.random(); session.cookie = { expires: (new Date()).getTime() + EXPIRES }; sessions[session.id] = session; return session; }; //请求到来时检查cookie的口令和服务端数据,如果过期,就重新生成,这部分只管服务端 exports.session = function(req, res, next){ var id = req.cookies[session_key]; if(!id){ req.session = generate(); } else{ var session = sessions[id]; if(session){ if(session.cookie.expires > (new Date()).getTime()){ //更新超时时间 session.cookie.expires = (new Date()).getTime() + EXPIRES; req.session = session; } else{ //超时了,删除旧的数据,并重新生成 delete sessions[id]; req.session = generate(); } } else{ //如果session过期或者口令不对,重新生成session req.session = generate(); } } var session = serialize(session_key, req.session.id, {path : '/'}); res.setHeader('Set-Cookie', session); next(); }; function serialize(name, val, opt){ var pairs = [name + '=' + val]; opt = opt || {}; if(opt.maxAge) pairs.push('Max-Age=' + opt.maxAge); if(opt.domain) pairs.push('Domain=' + opt.domain); if(opt.path) pairs.push('Path=' + opt.path); if(opt.expires) pairs.push('Expires=' + opt.expires.toUTCString()); if(opt.httpOnly) pairs.push('HttpOnly'); if(opt.secure) pairs.push('Secure'); return pairs.join(';'); }
你可以考虑下我的这个实现 我的实现
其实我的想法和你的初衷有点类似,因为我用Node做后端接口,前段界面有前段工程师做。完全独立的。所以当初采用express自带的session存在一个问题,就是每一次request都是新的sessionid,而且还存在跨域问题(服务端api.xx.com,前端为www.xx.com)。因此我的做法就是:在登陆的时候,讲sessionid作为登陆接口的json输出数据,这样前端拿到了sessionid后,存在本地localstorage中,然后每次请求的时候把sessoinid传上来。 user_serv ice.js 你可以参考下。
来凑热闹, 不通过框架实现redis-session,至少现在公司用的还不错。
http://kirochen.com/2015/07/09/about-cookie-session/ http://kirochen.com/2015/07/28/client-session/ 最近写的博客,你可以看看,希望对你有用,不对的地方也可以指出
想像成表结构,实现curd+更新机制 感觉session的更新机制重要点 express-session代码,不多
其实理解到session的本质后就容易实现了。sessionId是一个由服务器生成的uniqueId,通过返回结果时的Set-Cookie来告诉浏览器你下次会话把这个传给我,然后浏览器下次请求时就会带上Cookie这个header来告诉服务器我就是那谁谁谁
恩,看二楼的实现就行了,很容易理解,和九浅一深nodejs里的一样
多谢各位的耐心解答!~
@wp3xpp 忽然间又恍悟到一招…
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
expressjs/session 自己去实现一个sessionstore
这是一段基于cookie实现session的简单代码,还有很多地方不完善,可以参考express的实现
你可以考虑下我的这个实现 我的实现
其实我的想法和你的初衷有点类似,因为我用Node做后端接口,前段界面有前段工程师做。完全独立的。所以当初采用express自带的session存在一个问题,就是每一次request都是新的sessionid,而且还存在跨域问题(服务端api.xx.com,前端为www.xx.com)。因此我的做法就是:在登陆的时候,讲sessionid作为登陆接口的json输出数据,这样前端拿到了sessionid后,存在本地localstorage中,然后每次请求的时候把sessoinid传上来。 user_serv ice.js 你可以参考下。
来凑热闹, 不通过框架实现redis-session,至少现在公司用的还不错。
http://kirochen.com/2015/07/09/about-cookie-session/ http://kirochen.com/2015/07/28/client-session/ 最近写的博客,你可以看看,希望对你有用,不对的地方也可以指出
1.新用户请求 2.分配session id、 3.set cookie session id 4.用户再次请求,带cookie(含session id) 5.以session id 为key,在session中找到对应的value
想像成表结构,实现curd+更新机制 感觉session的更新机制重要点 express-session代码,不多
其实理解到session的本质后就容易实现了。sessionId是一个由服务器生成的uniqueId,通过返回结果时的Set-Cookie来告诉浏览器你下次会话把这个传给我,然后浏览器下次请求时就会带上Cookie这个header来告诉服务器我就是那谁谁谁
恩,看二楼的实现就行了,很容易理解,和九浅一深nodejs里的一样
多谢各位的耐心解答!~
@wp3xpp 忽然间又恍悟到一招…