不通过框架 实现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/ 最近写的博客,你可以看看,希望对你有用,不对的地方也可以指出
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 忽然间又恍悟到一招…