Redis

2012-12-23 20 views
30

से सत्र को कैसे सहेजने और पुनर्प्राप्त करने के लिए मैं Node.js. में लिखित मेरी प्रमाणीकरण प्रणाली में Redis सत्र को एकीकृत करने की कोशिश कर रहा हूं।Redis

मैं सफलतापूर्वक रेडिस सर्वर, connect-redis और एक्सप्रेस सर्वर स्थापित करने में सक्षम हूं।

var express = require("express"); 
var RedisStore = require("connect-redis")(express); 
var redis = require("redis").createClient(); 

app.use(express.cookieParser()); 
app.use(express.session({ 
    secret: "thisismysecretkey", 
    store: new RedisStore({ host: 'localhost', port: 6379, client: redis }) 
})); 

अब ... कैसे मैं वास्तव में बनाने, पढ़ने और सत्र को नष्ट करते हैं:

यहाँ मेरी सेटअप (सिर्फ महत्वपूर्ण बिट) है? मैंने connect-redis और एसओ पर यहां कई प्रश्नों को कैसे सेट अप किया है, इस बारे में कई लेख पढ़े हैं, लेकिन मैं प्रत्येक कॉन्फ़िगरेशन पर केवल एक स्टॉप की कसम खाता हूं और यह वास्तव में इसका उपयोग करने के तरीके की व्याख्या नहीं करता है ...

मुझे पता है कि यह है शायद बेहद सरल है, लेकिन कृपया नीचे मत डालो और बस समझाओ :)।

उत्तर

19

यह सब कुछ होना चाहिए। आप req.session के माध्यम से अपने मार्ग हैंडलर में सत्र तक पहुंच सकते हैं। सत्र स्वचालित रूप से बनाए, सहेजे और नष्ट हो जाते हैं।

यदि आपको उपयोगकर्ता के लिए मैन्युअल रूप से नया सत्र बनाने की आवश्यकता है, तो req.session.regenerate() पर कॉल करें।

यदि आपको इसे मैन्युअल रूप से सहेजने की आवश्यकता है, तो आप req.session.save() पर कॉल कर सकते हैं।

यदि आपको इसे मैन्युअल रूप से नष्ट करने की आवश्यकता है, तो आप req.session.destroy() पर कॉल कर सकते हैं।

विधियों और गुणों की पूरी सूची के लिए the Connect documentation देखें।

4

इस कोड पर विचार करें।

var express = require('express'); 
var redis = require("redis"); 
var session = require('express-session'); 
var redisStore = require('connect-redis')(session); 
var bodyParser = require('body-parser'); 
var client = redis.createClient(); 
var app = express(); 

app.set('views', __dirname + '/views'); 
app.engine('html', require('ejs').renderFile); 

app.use(session({ 
    secret: 'ssshhhhh', 
    // create new redis store. 
    store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl : 260}), 
    saveUninitialized: false, 
    resave: false 
})); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: true})); 

app.get('/',function(req,res){ 
    // create new session object. 
    if(req.session.key) { 
     // if email key is sent redirect. 
     res.redirect('/admin'); 
    } else { 
     // else go to home page. 
     res.render('index.html'); 
    } 
}); 

app.post('/login',function(req,res){ 
    // when user login set the key to redis. 
    req.session.key=req.body.email; 
    res.end('done'); 
}); 

app.get('/logout',function(req,res){ 
    req.session.destroy(function(err){ 
     if(err){ 
      console.log(err); 
     } else { 
      res.redirect('/'); 
     } 
    }); 
}); 

app.listen(3000,function(){ 
    console.log("App Started on PORT 3000"); 
}); 

तो तुम कनेक्ट-redis स्थापित करें और उसे करने के लिए अपने एक्सप्रेस-सत्र उदाहरण पारित करने के लिए की जरूरत है।

फिर मिडलवेयर में redisStore प्रारंभ करें इस तरह के सर्वर विवरण के साथ।

app.use(session({ 
    secret: 'ssshhhhh', 
    // create new redis store. 
    store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl : 260}), 
    saveUninitialized: false, 
    resave: false 
})); 

मैंने ttl को 260 पर रखा है, तो आप बढ़ सकते हैं। टीटीएल अपनी सीमा तक पहुंचने के बाद, यह स्वचालित रूप से रेडिस कुंजी को हटा देगा।

राउटर में आप req.session चर का उपयोग एसईटी, संपादित या सत्र में DESTROY कर सकते हैं।

एक और बात ...

आप कस्टम कुकी चाहते हैं यानी के रूप में ही नहीं अपने Redis की दुकान में के रूप में आप कुकी-पार्सर उपयोग कर सकते हैं कुकी रहस्य स्थापित करने के लिए।

उम्मीद है कि यह मदद करता है।

लिंक: https://codeforgeek.com/2015/07/using-redis-to-handle-session-in-node-js/

संबंधित मुद्दे