[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.이제 모든 작업이 있어야한다. 당신은 req.session를 통해 경로 처리기에서 세션에 액세스 할 수 있습니다. 세션이 만들어 저장하고 자동으로 파괴된다.
이제 모든 작업이 있어야한다. 당신은 req.session를 통해 경로 처리기에서 세션에 액세스 할 수 있습니다. 세션이 만들어 저장하고 자동으로 파괴된다.
수동으로 사용자, 전화 req.session.regenerate위한 새로운 세션을 생성해야하는 경우 ().
수동으로 저장해야하는 경우 req.session.save를 호출 할 수 있습니다 ().
당신이 수동으로 그것을 파괴해야하는 경우 req.session.destroy를 호출 할 수 있습니다 ().
메서드 및 속성의 전체 목록은 연결 설명서를 참조하십시오.
-
==============================
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.또한 실시간으로 모든 작업을 볼 수있는 레디 스 모니터 도구를 사용할 수 있습니다! 앱을 새로 고침 할 때 데이터가 콘솔 창에 표시가 나타납니다.
또한 실시간으로 모든 작업을 볼 수있는 레디 스 모니터 도구를 사용할 수 있습니다! 앱을 새로 고침 할 때 데이터가 콘솔 창에 표시가 나타납니다.
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"
from https://stackoverflow.com/questions/14014446/how-to-save-and-retrieve-session-from-redis by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] Stackexchange.Redis에 일괄 대 파이프 라이닝 (0) | 2019.12.31 |
---|---|
[REDIS] 푸른 레디 스에 StackExchange.Redis는 unusably 느리거나 시간 초과 오류가 발생합니다 (0) | 2019.12.31 |
[REDIS] 포크 메모리를 할당 할 수 없습니다 때문에 레디 스 실패 bgsave (0) | 2019.12.31 |
[REDIS] 어떻게 저장하고 레디 스와 사전을 검색 할 (0) | 2019.12.31 |
[REDIS] 어떻게 익스프레스 응용 프로그램에서 디버깅 제거하려면? (0) | 2019.12.31 |