我有类似这样的快递3 http://notjustburritos.tumblr.com/post/22682186189/socket-io-and-express-3匹配和socket.io连接
的想法是,让我从内抢会话对象的技术,一个良好的开端验证快递3/2连接会话密钥一个socket.io连接回调,在这种情况下通过connect-redis
存储会话。
所以,在app.configure
我们有
var db = require('connect-redis')(express)
....
app.configure(function(){
....
app.use(express.cookieParser(SITE_SECRET));
app.use(express.session({ store: new db }));
而在应用程序代码中有
var redis_client = require('redis').createClient()
io.set('authorization', function(data, accept) {
if (!data.headers.cookie) {
return accept('Sesssion cookie required.', false)
}
data.cookie = require('cookie').parse(data.headers.cookie);
/* verify the signature of the session cookie. */
//data.cookie = require('cookie').parse(data.cookie, SITE_SECRET);
data.sessionID = data.cookie['connect.sid']
redis_client.get(data.sessionID, function(err, session) {
if (err) {
return accept('Error in session store.', false)
} else if (!session) {
return accept('Session not found.', false)
}
// success! we're authenticated with a known session.
data.session = session
return accept(null, true)
})
})
的会话保存到Redis的,按键是这样的:
redis 127.0.0.1:6379> KEYS *
1) "sess:lpeNPnHmQ2f442rE87Y6X28C"
2) "sess:qsWvzubzparNHNoPyNN/CdVw"
并且这些值是未加密的JSON。到现在为止还挺好。
的饼干头,但是,包含有类似
{ 'connect.sid': 's:lpeNPnHmQ2f442rE87Y6X28C.obCv2x2NT05ieqkmzHnE0VZKDNnqGkcxeQAEVoeoeiU' }
所以现在SessionStore和connect.sid
不匹配,因为签名部分(.
后)从SessionStore版本剥离。
问题是,只是截断cookie的SID部分(lpeNPnHmQ2f442rE87Y6X28C)并基于该匹配进行匹配是安全的,还是应验证签名部分?如果是这样,怎么样?
这也看起来不错变种。似乎是优雅..我不知道它是否有任何缺点与只是将商店变量传递给socket.io并执行查找时,你想? – CommaToast