복붙노트

[REDIS] Node.js를 - 세션) (res.redirect을 통해 지속되지 않습니다

REDIS

Node.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. ==============================

    1.좋아, 나는 해결책을 찾아 냈다. 문제는 MAXAGE의 시간이 현재 날짜에 추가 된 것입니다. 그래서, 브라우저 측에서, 쿠키가 표시된 GMT 시간에 만료되도록 설정했다.

    좋아, 나는 해결책을 찾아 냈다. 문제는 MAXAGE의 시간이 현재 날짜에 추가 된 것입니다. 그래서, 브라우저 측에서, 쿠키가 표시된 GMT 시간에 만료되도록 설정했다.

    문제는 그 다음이었다 : 가끔, 당신이 당신의 컴퓨터를 일시 중단 ... 당신도 알다시피, 테스트 Node.js를 가상 컴퓨터를 사용합니다.

    글쎄, 무슨 일이 있었 기계의 시간이 이틀 늦게이다. 쿠키가 서버 측에 설정 될 때마다 따라서, 클라이언트 측 내 호스트 머신 이틀 늦게 아니 었 때문에 쿠키가 이미 만료되었다 생각했다.

    또 다른 바보 결과.

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

    2.당신은 다른 브라우저로 시도해 봤어? 당신은 페이지 리디렉션과 동일한 세션 ID를 유지하고 있습니까?

    당신은 다른 브라우저로 시도해 봤어? 당신은 페이지 리디렉션과 동일한 세션 ID를 유지하고 있습니까?

    당신은 req.session.cookie.expires를 추가 할 수 = 거짓; 리디렉션하기 전에 ...

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

    3.귀하의 코드를 꽤 단단한 외모,하지만 당신은 client.end를 사용하는 이유가 ()? 그것은 강제로 레디 스 연결을 종료하고 깨끗한하지 않습니다. 나는 당신이 전혀 필요 생각하지 않는다 :

    귀하의 코드를 꽤 단단한 외모,하지만 당신은 client.end를 사용하는 이유가 ()? 그것은 강제로 레디 스 연결을 종료하고 깨끗한하지 않습니다. 나는 당신이 전혀 필요 생각하지 않는다 :

    https://github.com/mranney/node_redis/issues/74

    나는 연결 - 레디 스에 대한 기본 아키텍처에 대해 확실하지,하지만 client.end를 호출하면 사용자의 세션을 재설정 무엇이 있는지 궁금 하군요. 당신이 그 꺼내하면 어떻게됩니까?

  4. ==============================

    4.나는이에 설정 ()을 app.get 밖에 지속되지 않은 세션에 뭔가를 설정 한 점에서 나는 비슷한 문제가 있었다.

    나는이에 설정 ()을 app.get 밖에 지속되지 않은 세션에 뭔가를 설정 한 점에서 나는 비슷한 문제가 있었다.

    내 문제는 내가 내 app.get의 말 ()에서 res.redirect ()를 수행하지 않은 것으로 밝혀졌다. 나는 같은 외모는 요청 객체에 뭔가를 설정 한 후 쓰레기 수집받을 수 있도록했다.

    나는 res.redirect ( '/ nextmethod')와 잘 데이터이 지속를 추가했다.

  5. ==============================

    5.확실히 당신은 어떤 방법으로이 힘 작업을 해당 세션을 저장해야합니다.

    확실히 당신은 어떤 방법으로이 힘 작업을 해당 세션을 저장해야합니다.

    req.session.regenerate(function(){
        req.session.username = username.toString();
        res.redirect('/home');
    });
    
  6. from https://stackoverflow.com/questions/8345256/node-js-session-doesnt-persist-through-res-redirect by cc-by-sa and MIT license