如何控制同一用户名不同浏览器可以登陆问题。
1、服务端保存一个用户的会话Id与用户Id的映射关系 2、用户每次登录:检查这个关系中是否存在登录用户的Id,如果存在,则删除关系(如果是重复登录,那么上一次登录的会话关系就被删除了,上一次登录的用户再访问网站时,由于关系被删除,就没有会话了),不存在则建立关系 3、用户是否登录:检查映射关系中是否存在当前请求提交的会话Id与用户Id的映射关系
@hainee 我是通过这样实现的,跟你说的道理是一样的。将对应关系放到node的一个全局变量中。来进行判断的。 不知道这个方法好不好。 global.session = {};
exports.setSession = function(sessionID,name){ session[sessionID] = name; } exports.getSession = function(sessionID){ return session[sessionID]; }
可以啊,不过具体的思路应该是这样的: global.name_session = {}; global.session_name = {}; exports.setSession = function(sessionId,name) { //如果在会话关系中存在相同用户名的会话,则将旧的会话注销掉 var oldSessionId = global.name_session[name]; if(oldSessionId) { exports.delSession(oldSessionId);//注销旧的会话 } //注册一个新的会话 global.session_name[sessionId] = name; global.name_session[name] = sessionId; } exports.getSession = function(sessionId){ return global.session_name[sessionId]; } exports.delSession = function(sessionId) { var name = global.session_name[sessionId]; if(!name) return false; delete global.session_name[sessionId]; delete global.name_session[name]; return true; }
exports.checkSession = function(sessionId) { return global.session_name[sessionId] ? true:false; }