저도 아랫분들 처럼 여러번 로그인/로그아웃을 해야 정상적으로 처리되는데요.
사실은 그렇지 않습니다. 여러분이 로그인/로그아웃 버튼을 한번 누르면 정상적으로 해당 로직이 처리가 됩니다.
한번 누르시고 새로고침을 해보시면 알 수 있어요..
그런데 새로고침을 하지 않고도 이 문제를 해결할 수 있는 방법이 뭔지 모르겠네요 헤헤
+ 추가..
죄송합니다... 여러분들과 저도 같은 처지였어요ㅠㅠ...
++ 또 추가
이 페이지 mysql 수업에서 해답이 나왔어요.
delete 나 req.session.username = user.username 의 실행이 끝나기 전에 redirect 실행이 이루어 질 수도 있기 때문에 아랫분들께서 여러번 로그인이나 로그아웃을 해도 상태가 변하지 않는 문제가 생기는거였어요
이거는 node.js 가 비동기방식으로 진행되기 때문이겠죠?? 이를 해결하는 방법은요
... app.get('/welcome', (req, res) => {
....
if ( && ){
req.session.username = user.username;
// callback 처리를 해준다. 그러면 위의 statement 가 완전히 실행 되어야 redirect를 실행한다.
req.session.save( () => {
res.redirect('/welcome');
});
}
});
이런식으로 redirect를 콜백함수 안에 넣어두면 로그인/로그아웃 시에 상태변화가 잘 됩니다.
Error: EPERM: operation not permitted, rename 'C:\dev\web_nodejs\ex_cookie\sessions\8N-rtazrkSnCPpBH3ajo1eGQXLw-WHiE.json.1722248377' -> 'C:\dev\web_nodejs\ex_cookie\sessions\8N-rtazrkSnCPpBH3ajo1eGQXLw-WHiE.json'
at Error (native)
제발 이것좀 도와주십쇼 file session 하는중인데 왜 저런에러가 뜨면서 자꾸 로그인을 해도 Welcome만 뜨고 어떨때는 파일에 저장된 session값에 displayName이 들어가긴하는데 대부분 안들어갑니다. 위와같은 에러도 계속 뜨고요. 그리고 로그인이 되어도 계속 welcome창만 뜹니다. 정말 이걸로 반나절 삽질하고 있는데 어떻게 해결방법 없을까요?
여기에 한가지 더해서 TravelDreammer님이 알려주신대로 해서 로그인은 됬는데 로그아웃이 안되더라구요
로그아웃에서도
delete req.session.displayName;
req.session.save(function() {
res.redirect('/welcome');
});
req.session.save()문 넣어주니까 제대로 동작하더군요
제 짧은 생각으로는 저를 포함해서 안됬던 분들은 session 정보를 바꾸고 나서 그게 저장이 안됬던 것 같은데
req.session.save()문으로 명시적으로 저장해주어서 제대로 동작이 됬던 것 아닐까 추측해봅니다
안녕하세요 egoing님. 열혈 수강자중에 한명입니다.
orientDB를 이용한 세션스토어 적용을 하고 웹서버 작동 상태에서 /welcome 페이지로 접속하려고 하는데 자꾸 로딩만 될뿐 페이지로 접속되지 않습니다. 원인을 알수없어 댓글을 남깁니다 파일 상태로 저장하는 세션 스토어 부분에는 잘 작동했는데..
windows 사용자 중에 저와 비슷한 문제가 발생하시는 분 있으실거 같아서 올리게 되었어요!
저의 컴퓨터는 windows 10 Pro, nodejs v4.4.5 LTS 입니다.
첫 번째 문제로 app_session_file.js를 하는 과정에서 ./session 디렉토리에 .json 파일이 재생성되는 문제가 발생했어요.
-> app.use(session({ ... })안 property 중에 store: new FileStore()에서 option을 줄 수 있는데 option으로 path를 잡아주니 해결이 되었어요.
-> store: new FileStore( { path: './sessions/'} ) 라고 해주었습니다.
두 번째 문제로 Error : EPERM: operation not permitted, rename ... 하고 파일이름 뒤에 시간정보 같은게 붙는 파일 명에서 없는 정보의 이름으로 연결 시켜주라는 식의 error가 계속 발생되어 supervisor를 사용했더니 충돌이 자꾸 발생해서 무한 재실행 되었어요.
혹시 그 문제 해결 방법 아시면 알려주세요 저도 session 을 파일로 저장하는 부분에서 로그인을 해도 session data가 변경 되지 않아서(DisplayName 추가 안됨) 계속 Welcome login 창만 뜨고 있습니다.
정보가 맞지 않은 경우 send를 redirect로 바꿔도 결과가 같습니다.
Can't set headers after they are sent.
이라고 console.log에 떠서 검색해보니
로그인의 정보를 받아주는 post에서
정보가 맞으면 redirect가 되고 정보가 맞지 않으면 send로 처리한게 문제였던거 같습니다~
구글리을 해보니까 redirect와 send 는 같이쓰면 안된다고 하는데 send부분을 redirect welcome으로 해주면 되더라구요~ 이게 이유가 맞나 궁금합니다
mysql은 방법으로는 잘 작동이 되는데 sessions 파일로 저장하는 부분을 할 때
sessions파일에 정보.json 파일도 생기고 하는데
로그인을 하면 계속 welcome만 뜹니다~ 세션이 유지가 안되는건가 싶기도하고 그대로 따라했는데 말이죠~!
그리고 그 sessions 폴더에 파일에도 변화가 없습니다. 지우고 다시해도 똑같고 그렇습니다 ㅜㅜ 왜그러는걸까요?
mysql에서 알려주신 req.session.save(function{}) 방법도 써봤지만 로그인이 되질않네요 ㅠㅠ
mysql에 저장하는 것은 되는데 왜 유독 파일 저장형태만 이러는 것일까요? ㅜㅜ
파일부분강좌에서 잠시 보여주셨던 브라우저에서 강제로 session을 삭제했을때에 이슈를 한개 발견했습니다.
위 상황에서 서버의 sessions 폴더에는 기존에 남겨뒀었던 Session Key값이 남겨져 있었습니다.
해당 값은 쓰레기 값일 것 같은데요. 해당 키 값을 정리하는 방법이 있을까요?
덩달아 확인해본 결과 서버의 Key값을 삭제하고 서버를 재 부팅 했을때
클라이언트에서 가지고 있는 sid값이 존재하지 않아서 다시 로그인을 시도하였으나 로그인이 되지 않는 현상이 있습니다. 사용자가 서버요청이 왔을때 존재하지 않는 쿠키일 경우 이를 삭제해주는 코드가 들어가야 하는지요? 이래저래 해보고 싶은데 아직 감을 다 못 잡았네요.