[REDIS] Node.js를 - 세션) (res.redirect을 통해 지속되지 않습니다
REDISNode.js를 - 세션) (res.redirect을 통해 지속되지 않습니다
나는 (거의) 성공적으로 핸들 세션 Express와 레디 스와 Node.js를 사용하고 있습니다.
내가 데 문제는 내가 res.redirect를 사용할 때 세션이 유지되지 않는다는 점이다 ().
여기에 내가 그것을 볼 수있는 방법입니다 :
req.session.username = username.toString();
console.log(req.session);
res.redirect('/home');
을 console.log ()는 출력 :
{ lastAccess: 1322579131762,
cookie:
{ path: '/',
httpOnly: true,
_expires: Tue, 29 Nov 2011 15:06:31 GMT,
originalMaxAge: 60000 },
username: 'admin' }
자, 여기에 다음과 같은 코드는 다음과 같습니다
app.get('/home', [app.requireLogin], function(req, res, next) {
// Not showing the rest as it's not even getting there
// Instead, here is what's interesting
app.requireLogin = function(req, res, next) {
console.log(req.session);
이을 console.log ()이 인쇄합니다 :
{ lastAccess: 1322579131775,
cookie:
{ path: '/',
httpOnly: true,
_expires: Tue, 29 Nov 2011 15:06:31 GMT,
originalMaxAge: 60000 } }
분명히, '사용자 이름'개체가 사라졌다. 세션은 그것을 유지, 단지 새로운 재건되지 않았습니다.
나는이 문제를 어떻게 해결할 수 있습니까? 어떤 정보가 필요하면 주저하지 마십시오.
여기에 내가 세션 관리를 설정 한 코드는 다음과 같습니다
app.configure(function() {
// Defines the view folder and engine used.
this.set('views', path.join(__dirname, 'views'));
this.set('view engine', 'ejs');
// Allow parsing form data
this.use(express.bodyParser());
// Allow parsing cookies from request headers
this.use(express.cookieParser());
// Session management
this.use(express.session({
// Private crypting key
secret: 'keyboard cat',
store: new RedisStore,
cookie: {
maxAge: 60000
}
}));
this.use(app.router);
});
여기에서 요점 (I 말은, 그것의 부분) 전체 프로젝트이다 https://gist.github.com/c8ed0f2cc858942c4c3b (렌더링 뷰 속성을 무시)
해결법
-
==============================
1.좋아, 나는 해결책을 찾아 냈다. 문제는 MAXAGE의 시간이 현재 날짜에 추가 된 것입니다. 그래서, 브라우저 측에서, 쿠키가 표시된 GMT 시간에 만료되도록 설정했다.
좋아, 나는 해결책을 찾아 냈다. 문제는 MAXAGE의 시간이 현재 날짜에 추가 된 것입니다. 그래서, 브라우저 측에서, 쿠키가 표시된 GMT 시간에 만료되도록 설정했다.
문제는 그 다음이었다 : 가끔, 당신이 당신의 컴퓨터를 일시 중단 ... 당신도 알다시피, 테스트 Node.js를 가상 컴퓨터를 사용합니다.
글쎄, 무슨 일이 있었 기계의 시간이 이틀 늦게이다. 쿠키가 서버 측에 설정 될 때마다 따라서, 클라이언트 측 내 호스트 머신 이틀 늦게 아니 었 때문에 쿠키가 이미 만료되었다 생각했다.
또 다른 바보 결과.
-
==============================
2.당신은 다른 브라우저로 시도해 봤어? 당신은 페이지 리디렉션과 동일한 세션 ID를 유지하고 있습니까?
당신은 다른 브라우저로 시도해 봤어? 당신은 페이지 리디렉션과 동일한 세션 ID를 유지하고 있습니까?
당신은 req.session.cookie.expires를 추가 할 수 = 거짓; 리디렉션하기 전에 ...
-
==============================
3.귀하의 코드를 꽤 단단한 외모,하지만 당신은 client.end를 사용하는 이유가 ()? 그것은 강제로 레디 스 연결을 종료하고 깨끗한하지 않습니다. 나는 당신이 전혀 필요 생각하지 않는다 :
귀하의 코드를 꽤 단단한 외모,하지만 당신은 client.end를 사용하는 이유가 ()? 그것은 강제로 레디 스 연결을 종료하고 깨끗한하지 않습니다. 나는 당신이 전혀 필요 생각하지 않는다 :
https://github.com/mranney/node_redis/issues/74
나는 연결 - 레디 스에 대한 기본 아키텍처에 대해 확실하지,하지만 client.end를 호출하면 사용자의 세션을 재설정 무엇이 있는지 궁금 하군요. 당신이 그 꺼내하면 어떻게됩니까?
-
==============================
4.나는이에 설정 ()을 app.get 밖에 지속되지 않은 세션에 뭔가를 설정 한 점에서 나는 비슷한 문제가 있었다.
나는이에 설정 ()을 app.get 밖에 지속되지 않은 세션에 뭔가를 설정 한 점에서 나는 비슷한 문제가 있었다.
내 문제는 내가 내 app.get의 말 ()에서 res.redirect ()를 수행하지 않은 것으로 밝혀졌다. 나는 같은 외모는 요청 객체에 뭔가를 설정 한 후 쓰레기 수집받을 수 있도록했다.
나는 res.redirect ( '/ nextmethod')와 잘 데이터이 지속를 추가했다.
-
==============================
5.확실히 당신은 어떤 방법으로이 힘 작업을 해당 세션을 저장해야합니다.
확실히 당신은 어떤 방법으로이 힘 작업을 해당 세션을 저장해야합니다.
req.session.regenerate(function(){ req.session.username = username.toString(); res.redirect('/home'); });
from https://stackoverflow.com/questions/8345256/node-js-session-doesnt-persist-through-res-redirect by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 어떻게 ServiceStack PooledRedisClientManager 장애 조치 작동합니까? (0) | 2020.01.15 |
---|---|
[REDIS] 실패와 자동화 된 페일 오버의 레디 스 / Jedis없이 단일 지점 (0) | 2020.01.15 |
[REDIS] 멀티 코어 서버 클러스터와 socket.io를 사용하는 좋은 방법은? (0) | 2020.01.15 |
[REDIS] 어떻게 autowire가 RedisTemplate <문자열, 롱> (0) | 2020.01.15 |
[REDIS] 레디 스는 - 여러 키의 값을 취득합니다 (0) | 2020.01.14 |