Server Side JavaScript

댓글

댓글 본문
  1. 손명균
    mysql에 session을 저장하고 사용했더니, 브라우저 다른 페이지로 이동 할 때마다 세션이 계속 생성됩니다. 계속 세션 데이터가 생성 되는게 맞는걸까요???
  2. unkwn98
    windows에서 mysql + node 연동이 안되시는 분들은 mysql 설치할때 v8.0이 아닌 v5.x으로 설치해보세요. 저는 그렇게 했더니 작동했습니다.
  3. 개발자가 되고싶은 사람
    아마도 입력순서문제인것 같습니다.
    options 와 sessionStore를 먼저 설정하신후에
    app.use(session({...}))를 입력하시면 될것 같네요.
    대화보기
    • 이희원
      끼윰.. 장수하셔야 해요..
    • 굼벵이
      완료
    • 리자몽
      mysql에 sessions 테이블은 자동으로 만들어지는데
      새로고침을 해도 데이터가 들어가지가 않네요.. 무슨문제죠?
    • 쌀랑말랑
      인정입니다.
      댓글 먼저 보지 않았으면 저도 갈아입으러 갈뻔했습니다.
      대화보기
      • 싸보렷다
        와 미뗬따....
        너무 경이롭다...
        MTSQL 로 모듈 설치하고 포트 연결한뒤에
        show tables 했는데 세션 테이블이 생성된 것을 보고
        그냥 싸보렸다...
        진짜.... 너무 잘가르치십니다...
        넘나 재미진것...
      • antil
        저도 아랫분들 처럼 여러번 로그인/로그아웃을 해야 정상적으로 처리되는데요.
        사실은 그렇지 않습니다. 여러분이 로그인/로그아웃 버튼을 한번 누르면 정상적으로 해당 로직이 처리가 됩니다.
        한번 누르시고 새로고침을 해보시면 알 수 있어요..
        그런데 새로고침을 하지 않고도 이 문제를 해결할 수 있는 방법이 뭔지 모르겠네요 헤헤

        + 추가..
        죄송합니다... 여러분들과 저도 같은 처지였어요ㅠㅠ...

        ++ 또 추가
        이 페이지 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를 콜백함수 안에 넣어두면 로그인/로그아웃 시에 상태변화가 잘 됩니다.
      • 프로그래멍
        여기 수업에서는 express에서 view(프론트)와 백엔드를 같은 코드(파일)로 구현하고 있는데요 저는 프론트는 angular를 사용하고 백엔드 express를 이용하여 구현하고 있는데 이렇게 나눠서 따로 실행시키니 프론트 즉 클라이언트로 세션id(connect.sid)가 저장되지않네요?? 브라우저의 개발자도구를 켜서 네트워크를 확인하니 서버에서 세션id(connect.sid)는 넘어오는데 프론트 코드가 문제인지 아님 백엔트 코드가 문제인지 모르겠네요 답글달아주시면 감사하겠습니다.
      • 웹초보
        저도 밑에분들처럼 app_session_file.js 할때 로그인은 한 서너번해야 접속되고.. 로그아웃누르면 로그아웃안대고 자꾸 redirect되는 현상 똑같이나와서.. 해결하신 밑에분들꺼보고 그대로했는데 되네요.. 근데 이게 어떻게해서 안댔는진 알겠는데.. 저렇게 코드를 바꾸면 왜 되는지 100%이해가안대네요 ㅜㅜ 답답합니다.. 아직 갈길이머네요.. 해결방안알려주신분들 감사합니다.
      • 박인호
        1-18
        수강완료.
        사용자가 접속할 때 데이터베이스의 session 테이블에서 새로운 행을 추가하고 (connect.sid)
        그 id 정보를 사용자의 브라우저에 쿠킹.
        쿠킹된 id값과 데이터베이스의 id값이 일치하는 정보를 조회.
      • csslick
        로그인시 redirect()로 페이지가 갱신되면서 세션 정보값이 날라가는 군요. 로그아웃도 마찬가지 문제 같습니다.
        delete문 대신 req.session.destroy()로 하니 세션 삭제(로그아웃)이 되네요.
        대화보기
        • 예찬
          아 해결했습니다. 밑에 답이 있군요 ㅎㅎ
          대화보기
          • 예찬
            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()문으로 명시적으로 저장해주어서 제대로 동작이 됬던 것 아닐까 추측해봅니다
            대화보기
            • hjhyun123
              안녕하세요 egoing님. 열혈 수강자중에 한명입니다.
              orientDB를 이용한 세션스토어 적용을 하고 웹서버 작동 상태에서 /welcome 페이지로 접속하려고 하는데 자꾸 로딩만 될뿐 페이지로 접속되지 않습니다. 원인을 알수없어 댓글을 남깁니다 파일 상태로 저장하는 세션 스토어 부분에는 잘 작동했는데..
            • fallback
              같은 문제때문에, connect-loki로 바꿔서 사용중입니다.
              대화보기
              • analogsoul91
                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를 사용했더니 충돌이 자꾸 발생해서 무한 재실행 되었어요.

                혹시나 아시는 분이 있다면 알려주세요!!

                http://stackoverflow.com......ows
              • TravelDreammer
                https://opentutorials.org......078
                의 마지막 강의 끝부분에 해결하는게 나옵니다!!

                결론은

                return req.session.save(function(){
                res.redirect('/welcome');
                })
                으로 하시면 됩니다~!

                조건을 걸어도 밑에 것도 실행되서 그런것 같습니다~!
                대화보기
                • 혹시 그 문제 해결 방법 아시면 알려주세요 저도 session 을 파일로 저장하는 부분에서 로그인을 해도 session data가 변경 되지 않아서(DisplayName 추가 안됨) 계속 Welcome login 창만 뜨고 있습니다.
                  정보가 맞지 않은 경우 send를 redirect로 바꿔도 결과가 같습니다.
                  대화보기
                  • TravelDreammer
                    Can't set headers after they are sent.
                    이라고 console.log에 떠서 검색해보니

                    로그인의 정보를 받아주는 post에서
                    정보가 맞으면 redirect가 되고 정보가 맞지 않으면 send로 처리한게 문제였던거 같습니다~
                    구글리을 해보니까 redirect와 send 는 같이쓰면 안된다고 하는데 send부분을 redirect welcome으로 해주면 되더라구요~ 이게 이유가 맞나 궁금합니다
                  • TravelDreammer
                    mysql은 방법으로는 잘 작동이 되는데 sessions 파일로 저장하는 부분을 할 때
                    sessions파일에 정보.json 파일도 생기고 하는데
                    로그인을 하면 계속 welcome만 뜹니다~ 세션이 유지가 안되는건가 싶기도하고 그대로 따라했는데 말이죠~!
                    그리고 그 sessions 폴더에 파일에도 변화가 없습니다. 지우고 다시해도 똑같고 그렇습니다 ㅜㅜ 왜그러는걸까요?
                    mysql에서 알려주신 req.session.save(function{}) 방법도 써봤지만 로그인이 되질않네요 ㅠㅠ
                    mysql에 저장하는 것은 되는데 왜 유독 파일 저장형태만 이러는 것일까요? ㅜㅜ
                  • egoing
                    우선 session이 남겨진 것을 바로 삭제할 필요가 없고요. 정기적으로 오래된 세션을 삭제해주시면 됩니다. 그런데 대체로 세션 라이브러리들이 이런 기능을 내장하고 있기 때문에 자동으로 처리되는 경우가 많습니다.

                    두번째 케이스는 제가 지금 재현 상황을 갖추지 못해서 다른 분에게 일단 답변을 넘겨보겠습니다. ㅠㅠ
                    대화보기
                    • 폭풍감자
                      파일부분강좌에서 잠시 보여주셨던 브라우저에서 강제로 session을 삭제했을때에 이슈를 한개 발견했습니다.

                      위 상황에서 서버의 sessions 폴더에는 기존에 남겨뒀었던 Session Key값이 남겨져 있었습니다.
                      해당 값은 쓰레기 값일 것 같은데요. 해당 키 값을 정리하는 방법이 있을까요?

                      덩달아 확인해본 결과 서버의 Key값을 삭제하고 서버를 재 부팅 했을때
                      클라이언트에서 가지고 있는 sid값이 존재하지 않아서 다시 로그인을 시도하였으나 로그인이 되지 않는 현상이 있습니다. 사용자가 서버요청이 왔을때 존재하지 않는 쿠키일 경우 이를 삭제해주는 코드가 들어가야 하는지요? 이래저래 해보고 싶은데 아직 감을 다 못 잡았네요.
                    • ㅎㅎ
                      mysql로 할때 그냥 설치하면 0.4.4 버전이 설치 되는데
                      에러가 나더군요...
                      설치할때 npm install express-mysql-session@1.0.0-rc.0 --save
                      이렇게 하면 제대로 동작됩니다
                    • 한아
                      감사합니다!
                      대화보기
                      • 하이루
                        노드제이에스에 최고봉인 채팅도 해주세요
                      • egoing
                        옙!
                        대화보기
                        • 한아
                          혹시 나중에는 passport 까지 해주시나요?
                        버전 관리
                        egoing
                        현재 버전
                        선택 버전
                        graphittie 자세히 보기