2013-02-23 2 views
2

내 ExpressJS 응용 프로그램의 세션에 문제가 있습니다. 로컬에서는 완벽하게 작동하지만 AppFog에서 내 응용 프로그램을 호스팅 할 때 세션과 관련된 몇 가지 문제가 발생합니다. 때때로 손실됩니다 ... 내 관리자 패널에서. 페이지를 새로 고칠 때ExpressJS가 포함 된 AppFog의 세션

나는 ... 세션이 더 이상 일을, 왜 알지 모르겠지만

var restrictedArea = function(req, res, next) { 
    if(req.session.access) 
     next(); 
    else 
     res.redirect('/signin'); 
} 

// Get/Post example on admin panel 
app.get('/posts/add', restrictedArea, admin.addPost); 
app.post('/posts/add', restrictedArea, admin.savePost); 
app.post('/posts/delete', restrictedArea, admin.deletePost); 
app.get('/posts/edit/:id', restrictedArea, admin.editPost); 

내 app.configure :

app.configure(function() { 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(express.static(path.join(__dirname, 'public'))); 
    //app.use(express.session({secret: 'some secret'})); 
     app.use(express.cookieSession({ 
       secret: 'SECRET', 
       cookie: { access: false } 
      }) 
     ); 
    app.use(express.session({secret: 'some secret'})); 
    app.use(app.router); 
    app.use(function(req, res, next){ 
     res.render('404.jade', { 
      title: "404 - Page Not Found", 
      showFullNav: false, 
      status: 404, 
      url: req.url 
     }); 
    }); 
}); 

내 경로 :

exports.authenticate = function(req, res) { 
    if(req.body.username == user.username && req.body.password == user.password){ 
     req.session.access = true; 
     renderToAdminIndex(req, res); 
    }else{ 
     req.session.access = false; 
     renderToSignin(req, res, "Error, please try again!"); 
    } 
} 

signout 기능 :

당신이 명시 3.X를 사용하는 경우

앤서니

+0

세션 관리를 어떻게 초기화합니까? 너는 무엇을 사용하니? 쿠키? redis? –

+0

내 주제를 내 app.configure()로 업데이트했습니다. - 쿠키를 사용합니다. – tonymx227

+0

그래서 req.session.access는 값을 잃습니다. Chrome의 네트워크 속성을 사용하여 쿠키의 값을 확인해야합니다. –

답변

2

당신은 사용할 필요가 express.cookieSession :

app.configure(function() { 

    ... 

    app.use(express.cookieParser()); 
    app.use(express.cookieSession(
    { 
     secret: 'SECRET', 
     cookie: { maxAge: ... } 
    } 
)); 

참조 :

세션을 가리기하려면 http://expressjs.com/api.html#cookieSession

UPDATE :

exports.signout = function(req, res) { 
    req.session = null; 
    res.redirect('/'); 
} 
+0

하지만 내 경로에서 세션을 설정해야합니다. 내 app.configure()가 아닙니다 ... 위의 경로를 참조하십시오 ... – tonymx227

+0

내 대답과 같이 세션에 쿠키를 넣으려면 express를 구성해야합니다. 경로에 세션 값을 설정합니다. –

+0

제목을 업데이트했지만 작동하지만 세션을 삭제할 때 오류가 발생합니다. TypeError : Object # 에는 'destroy'메서드가 없습니다. – tonymx227