2014-10-28 4 views
0

내 노드/HTML 프로젝트에서 express 4 및 express-session을 사용하는 데 문제가 있습니다.Nodejs : 생성 후 세션이 정의되지 않았습니다.

  1. login.html은 노드 프로그램을 ajax 호출합니다.

  2. 노드가 성공하면 req.session.username 속성에서 사용자 이름을 기억하는 세션을 생성하고 csmain.htmllogin.html으로 반환합니다. login.html은 브라우저를 csmain.html으로 리디렉션합니다.

  3. csmain.html은 즉시 load()에서 ajax 호출을하지만, 문제는 현재 세션이 준비되지 않은 것처럼 보입니다. req.session.user은 노드에서 정의되지 않습니다. 즉, ajax 호출에서 브라우저가 load()에 세션을 사용하지 않았 음을 의미합니다.

어떻게 해결할 수 있습니까? 노드의 로그인 부분에

코드는 로그인 HTML에서 --javascript 부분을 재 세션을

request.session.regenerate(function(err) { 
}); 
if (request.session.views) { 
    // empty 
} else { 
    request.session.views = 1; 
    request.session.username = username; 
} 

HTML을 생성합니다. 당신이 다음이 regenerate() 호출이 비동기 가능성이 세션 저장소로 데이터베이스를 사용하고 있기 때문에 xmlHttp.responseText에서 제 1 회 캐릭터 로그인 상태이며, 나머지 텍스트는 HTTP 링크

if (status === BDX_ERR_SQL_WRONG_PASSWORD) { 
    document.getElementById("feedbackMsg").innerHTML = 'login error'; 
}else if (status === '0') { 
    window.location = '../' + xmlHttp.responseText.substring(1, len); 
} 
+0

를 사용하는 세션 저장소의 어떤 종류 즉, 콜백이 호출 될 때까지 당신이 이런 식으로 할 필요가 있으므로 regenerate()이 완료되지 않음을 의미? 어떤 경우에는'regenereate()'가 비동기적일 수 있습니다. 콜백이 호출 될 때까지 완료되지 않으므로 재생성 콜백 내에 새 세션을 사용하는 코드를 넣어야합니다. – jfriend00

+0

@ jfiend00 세션의 백 스토어로 redis를 사용하고 있습니다. 다시 생성하는 콜백은 무엇입니까? 나는 익스프레스 세션 웹 사이트에서 찾을 수 없습니다. 예를 들려 줄 수 있습니까? – StevenZ

답변

1

입니다. 여기

request.session.regenerate(function(err) { 
    // should do error checking here 

    if (request.session.views) { 
     // empty 
    } else { 
     request.session.views = 1; 
     request.session.username = username; 
    } 

    // continue with the rest of your code flow here inside the callback 

}); 

익스프레스 세션 문서 : 당신이 https://github.com/expressjs/session#sessionregenerate

+0

고마워, 지금은 내가 나머지 코드를 모두 regenerate() {...} response.writ ('csmain.html')를 포함하여 넣어 후 ... 나는 단지 세션 속성 할당 라인을 넣기 전에 시도했다 그것으로 들어가고, 그것은 일하지 않았다. – StevenZ

관련 문제