복붙노트

[REDIS] 어떻게 저장하고 레디 스에서 세션을 검색 할

REDIS

어떻게 저장하고 레디 스에서 세션을 검색 할

나는 Node.js.로 작성 내 인증 시스템에 레디 스 세션을 통합하는 것을 시도하고있다

나는 성공적 레디 스 서버 연결 - 레디 스 및 익스프레스 서버를 설정 할 수 있었다.

여기 내 설치 (다만 중요한 비트)입니다 :

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 })
}));

이제 ... 어떻게 실제로 읽고, 만들고 세션을 파괴 하는가? 여기 SO에 설치 연결 - 레디 스 많은 질문에,하지만 난 단지 구성에 각각 정지를 맹세 방법에 기사의 톤을 읽고 실제로 그것을 사용하는 방법을 설명하지 않습니다 ...

나는 아마 매우 간단 것을 알고 있지만 : downvote 그냥 설명하지 마십시오.

해결법

  1. ==============================

    1.이제 모든 작업이 있어야한다. 당신은 req.session를 통해 경로 처리기에서 세션에 액세스 할 수 있습니다. 세션이 만들어 저장하고 자동으로 파괴된다.

    이제 모든 작업이 있어야한다. 당신은 req.session를 통해 경로 처리기에서 세션에 액세스 할 수 있습니다. 세션이 만들어 저장하고 자동으로 파괴된다.

    수동으로 사용자, 전화 req.session.regenerate위한 새로운 세션을 생성해야하는 경우 ().

    수동으로 저장해야하는 경우 req.session.save를 호출 할 수 있습니다 ().

    당신이 수동으로 그것을 파괴해야하는 경우 req.session.destroy를 호출 할 수 있습니다 ().

    메서드 및 속성의 전체 목록은 연결 설명서를 참조하십시오.

  2. ==============================

    2.이 코드를 생각해 보자.

    이 코드를 생각해 보자.

    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");
    });
    

    그래서 당신은 연결 - 레디 스를 설치하고에 명시 세션 인스턴스를 전달해야합니다.

    이 같은 다음의 미들웨어 초기화 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
    })); 
    

    난 당신이 증가 할 수 있으며, 260 TTL을 넣어. TTL이 한계에 도달 한 후에는 자동 레디 스 키를 삭제합니다.

    라우터에서는 SET, 편집에 req.session 변수를 사용하거나 세션을 파괴 할 수있다.

    하나 더...

    사용자 정의하려면 쿠키 즉 아닌 레디 스에서와 같은 사용자가 설정 쿠키 비밀에 쿠키 파서를 사용할 수 있습니다 저장한다.

    희망이 도움이.

    링크 : https://codeforgeek.com/2015/07/using-redis-to-handle-session-in-node-js/

  3. ==============================

    3.또한 실시간으로 모든 작업을 볼 수있는 레디 스 모니터 도구를 사용할 수 있습니다! 앱을 새로 고침 할 때 데이터가 콘솔 창에 표시가 나타납니다.

    또한 실시간으로 모든 작업을 볼 수있는 레디 스 모니터 도구를 사용할 수 있습니다! 앱을 새로 고침 할 때 데이터가 콘솔 창에 표시가 나타납니다.

    redis-cli monitor
    

    세션의 샘플 출력 TJ / 연결 - 레디 스를 사용하여

    1538704759.924701 [0 unix:/tmp/redis.sock] "expire" "sess:F9x-YgbgXu1g7RG8tFlkwY3RV0JzHgCh" "3600"
    1538704759.131285 [0 unix:/tmp/redis.sock] "get" "sess:F9x-YgbgXu1g7RG8tFlkwY3RV0JzHgCh"
    1538704787.179318 [0 unix:/tmp/redis.sock] "set" "sess:Hl3LPbOBdKO44SG4zQHFn2gfdiWTwzWW" "{\"cookie\":{\"originalMaxAge\":3600000,\"expires\":\"2018-10-05T02:59:47.178Z\",\"secure\":true,\"httpOnly\":true,\"domain\":\".indospace.io\",\"path\":\"/\"},\"path\":\"/\",\"userAgent\":{\"family\":\"NewRelicPingerBot\",\"major\":\"1\",\"minor\":\"0\",\"patch\":\"0\",\"device\":{\"family\":\"Other\",\"major\":\"0\",\"minor\":\"0\",\"patch\":\"0\"},\"os\":{\"family\":\"Other\",\"major\":\"0\",\"minor\":\"0\",\"patch\":\"0\"}},\"ip\":\"184.73.237.85\",\"page_not_found_count\":0,\"city\":\"Ashburn\",\"state\":\"VA\",\"city_state\":\"Ashburn, VA\",\"zip\":\"20149\",\"latitude\":39.0481,\"longitude\":-77.4728,\"country\":\"US\"}" "EX" "3599"
    1538704787.179318 [0 unix:/tmp/redis.sock] "set" "sess:Hl3LPbOBdKO44SG4zQHFn2gfdiWTwzWW" "{\"cookie\":{\"originalMaxAge\":3600000,\"expires\":\"2018-10-05T02:59:47.178Z\",\"secure\":true,\"httpOnly\":true,\"domain\":\".indospace.io\",\"path\":\"/\"},\"path\":\"/\",\"userAgent\":{\"family\":\"NewRelicPingerBot\",\"major\":\"1\",\"minor\":\"0\",\"patch\":\"0\",\"device\":{\"family\":\"Other\",\"major\":\"0\",\"minor\":\"0\",\"patch\":\"0\"},\"os\":{\"family\":\"Other\",\"major\":\"0\",\"minor\":\"0\",\"patch\":\"0\"}},\"ip\":\"184.73.237.85\",\"page_not_found_count\":0,\"city\":\"Ashburn\",\"state\":\"VA\",\"city_state\":\"Ashburn, VA\",\"zip\":\"20149\",\"latitude\":39.0481,\"longitude\":-77.4728,\"country\":\"US\"}" "EX" "3599"
    
  4. from https://stackoverflow.com/questions/14014446/how-to-save-and-retrieve-session-from-redis by cc-by-sa and MIT license