2012-02-26 12 views
10

सत्र आईडी पुनर्जीवित कर रहा है मैं NodeJS में Redis के साथ मानक सत्र दृढ़ता का उपयोग करने की कोशिश की: "। नए सत्र"NodeJS redis कनेक्ट जब यह कायम रहने चाहिए

var express = require('express'); 
var RedisStore = require('connect-redis')(express); 
var app = module.exports = express.createServer(); 

// Configuration 

app.configure(function(){ 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ 
    secret: "keyboard cat", 
    store: new RedisStore, 
    key: 'sid' 
    })); 
}); 


app.get('/', function (req, res) { 
    if (req.session.isValid) { 
    console.log("There is an existing session."); 
    } 
    else { 
    req.session.isValid = true; 
    console.log("New session."); 
    console.log('Old session ID: ' + req.header('Cookie')); 
    console.log('New session ID: ' + req.session.id); 
    } 

    res.render('index', {'title': s}); 
}); 
app.listen(4000); 

सिद्धांत रूप में मैं लाइन देखना चाहिए एक बार और वेबसाइट साइट के बाद की सभी कॉलों को "मौजूदा सत्र है" का नेतृत्व करना चाहिए। दुर्भाग्यवश प्रत्येक कॉल पर एक नया सत्र आईडी पुन: उत्पन्न होता है। ब्राउज़र में कुकी ठीक काम कर रहा है, सामग्री ठीक से फैलता है और मैं

req.header('Cookie') 

में देख सकते हैं इस तरह क्या सांत्वना लॉग लग रहा है:

[app.js] New session. 
[app.js] Old session ID: undefined 
[app.js] New session ID: nuoHKZj2j0AoRkvqT4xE5h6W.zF+DNv2rzr3kpeO2IyD7sa4xdamFQMugjfQvY6OYymE 
[app.js] New session. 
[app.js] Old session ID: sid=neLUc5PXxPoj1yFqukerv49x.BHzYKiuAfFSNHKd4fCAkv8wNwZO%2FxykJPN5R5tjAlQc 
[app.js] New session ID: FvuzjnXvchCkmVqsq5mrodL2.5YlT3InfTbvOwEUc0dNpPLT77tcdJpNuhbFGVYkLneQ 
[app.js] New session. 
[app.js] Old session ID: sid=pFbyVdlNZXtF5vZ35CW9sfmq.nJ1RBjJu59iUJJjmZv9TCYiYLcvycme%2BJh8sQC6%2FzEE 
[app.js] New session ID: KdPhwqwwgmOnPZEuVapy7EJe.I0TGT9HSSQQSporwCNsxl11rXDxR/ysjTeZb0lD5uwI 

एक ही समय में मैं उत्पादन करते समय निम्न में redis-CLI "मॉनिटर" आदेश चलाकर:

sess:nuoHKZj2j0AoRkvqT4xE5h6W.zF+DNv2rzr3kpeO2IyD7sa4xdamFQMugjfQvY6OYymE 
*2 
$3 
get 
$73 
sess:Q6Z06GL4hdRytKA2MToCIgVw.JWxImSB/m20Urn+IYMQqnNqfQp4ygAESiyBLORn3Iuo 
*2 
$3 
get 
$73 
sess:neLUc5PXxPoj1yFqukerv49x.BHzYKiuAfFSNHKd4fCAkv8wNwZO/xykJPN5R5tjAlQc 
*2 
$3 
get 
$73 
sess:FvuzjnXvchCkmVqsq5mrodL2.5YlT3InfTbvOwEUc0dNpPLT77tcdJpNuhbFGVYkLneQ 
*2 
$3 
get 
$73 
sess:zvCWdwzowgAfl6jH8m0D31vL.b5tK5VZUJtPHrdvH09A/hjhjoOg6bT0CmAcWWRf99SI 
*2 
$3 
get 
$73 
sess:pFbyVdlNZXtF5vZ35CW9sfmq.nJ1RBjJu59iUJJjmZv9TCYiYLcvycme+Jh8sQC6/zEE 
*2 
$3 
get 
$73 
sess:KdPhwqwwgmOnPZEuVapy7EJe.I0TGT9HSSQQSporwCNsxl11rXDxR/ysjTeZb0lD5uwI 
*2 
$3 
get 
$73 
sess:r793eaJyOnaq2RNyw1Hmpuwv.xnonbOlaWEAlpz+LDg0SHcUeAa0sbjyw0oIcwFmlX0w 

जब मैं RedisStore की MemoryStore insteand उपयोग करते हैं, सब कुछ उम्मीद से काम करता है की तरह।

कोई भी विचार?

+0

HI Raph - क्या आपने इसे हल किया? मुझे एक ही समस्या है:/ – UpTheCreek

+0

ऐसा लगता है कि एक नए रेडिस संस्करण के उन्नयन में चाल थी। लेकिन मुझे अभी भी पता नहीं है कि समस्या कहां से आई थी। – Raph

उत्तर

0

मुझे इसी तरह का मुद्दा था। मेरा सत्र हर अनुरोध पर पुनर्जीवित किया गया था। मैंने इसे वर्चुअल मशीन पर उचित तिथि निर्धारित करके हल किया जहां विकास होता है।

+0

क्या आपका मतलब है, ऐप वीएम और रेडिस वीएम के बीच एक अलग तारीख थी? विसंगति कितनी बड़ी थी? – UpTheCreek

-1

मेरे पास एक ही समस्या थी जब सत्र हर अनुरोध पर पुनर्जीवित किया गया था। इसका कारण यह था कि 'स्थिर' मिडलवेयर 'सत्र' के नीचे रखा गया था। तो,, उचित क्रम में middlewares जगह के लिए सुनिश्चित हो अर्थात:

... 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(express.session({ store: new RedisStore({ prefix: 'sid_' }) })); 
app.use(app.router) 
app.get ... 

'express.session' मिडलवेयर 'स्थिर' के तहत होना चाहिए।