我有两个跟踪会话信息的变量。其中一个变量具有超时功能,而另一个变量没有(用于发送到缓存)。
我首先创建变量:
//Save Session
sessions.data[sid] = {
'sid': sid,
'socket': null,
'timeout': null
};
//Cache Data
sessions.saved[sid] = { 'sid':sid };
//Save Cache
system.cache.save('sessions', sessions.saved);
//Begin Timeout
sessions.data[sid].timeout = this.timeout.start( sessions.data[sid] );
//Callback
callback( sessions.data[sid] );
添加更多变量并返回save: function(session)
:
//Overwrite session
sessions.data[session.sid] = session;
//Duplicate Session
sessions.saved[session.sid] = $.extend(true,{},session);
//Clear Duplicate Timeout
clearTimeout( sessions.saved[session.sid].timeout );
//Set Values to Null
sessions.saved[session.sid].timeout = null;
sessions.saved[session.sid].socket = null;
//Save Cache
system.cache.save('sessions', sessions.saved);
问题是两个变量(sessions.saved&& sessions.data)都有timeout: null
。我一直在阅读其他文章,关于如何阻止它通过引用传递,但似乎无法让它工作。我读了很多文章,比如:Clone Object without reference javascript但是无法让它发挥作用。我也尝试用自己的变量设置它:
var unreferenced = $.extend(true,{},session);
sessions.saved[session.sid] = unreferenced;
但我得到了相同的结果。非常感谢任何帮助:)
答案 0 :(得分:0)
原来这是一个完全不同的变量,在页面加载时创建引用:
system.cache.get('sessions',function(cache){
if(cache !== null){
sessions.data = JSON.parse(cache);
sessions.saved = sessions.data;
//Set new Timeouts, Log inactive users out
for(var key in sessions.data){
sessions.data[key].timeout = sessions.timeout.start( sessions.data[key] );
}
}
});
有点疏忽和2个小时的头疼!