Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

로그아웃 본문

Project/블로그 게시판 만들기

로그아웃

Seung__ 2021. 10. 5. 21:47

1. 현상


현재 로그아웃을 시도하면 화면이 바뀌지 않는다.

 

아래와 같이 로그아웃을 클릭하면

logcalhost:8080/logout 으로 접속하고 

 

session이 있는 경우 session을 만료시킨다. 이후 localhost:8080/으로 redirect된다.

 

이때 localhost:8080/ 접속 시 세션에 로그인 회원에 대한 정보가 없으면  home.html

 

정보가 있으면 loginHome.html을 뿌려준다.

 

하지만 로그아웃을 시도해도 뷰가 변경되지 않는다..

 

 

2. 원인 분석


 

localhost:8080/ 접속 시 처리하는 로직 중 세션 유뷰 확인 이후에 현재 세션에 담긴 정보를 찍어보자.

 

만약 로그아웃 시도 후 위에 작성한 로그가 남는다면, 세션 만료 처리가 되지 않아 발생하는 문제이다.

 

2021-10-05 21:30:41.863  INFO 1712 --- [nio-8080-exec-6] hello.blog.web.HomeController

: user id = test

 

log가 출력이 되었다.

 

현재 문제는 logout시도 시 session 만료처리가 되지 않는 것이다.

 

 

 

3. 문제 해결


    @PostMapping("/logout")
    public String logout(HttpServletRequest request){

        sessionManager.expire(request);
        
        return "redirect:/";
    }
    /**
     * 세션 만료
     */
    public void expire(HttpServletRequest request){
        Cookie sessionCookie = findCookie(request, SESSION_COOKIE_NAME);
        if(sessionCookie != null){
            sessionStore.remove(sessionCookie.getValue());
        }

logout로직을 변경해주었다. 직접 관련된 쿠키를 찾고, session에서 해당 쿠키를 삭제해준다.

 

 

4. 문제의 원인


    @PostMapping("/logout")
    public String logout(HttpServletRequest request){
        //세션 없으면 null 반환.
        HttpSession session = request.getSession(false);

        if(session != null){
            session.invalidate();
        }
        
        return "redirect:/";
    }

문제가 발생했을 때는, logout로직에서 HttpSession을 사용했다.

 

lotout측에서 HttpSession을 사용하기 위해서는 로그인 시 LoginController에서 HttpSession을 만들어서 보내줬어야..

 

HttpSession이 아예 만들어 지지 않았으니, if(session != null) 로직을 아예 탈 수가 없었던것.....

 

즉 HttpSession에 대한 이해가 없이 코드를 작성함..

 

 

5. 결과


현재 로그인/로그아웃 로직은 쿠키를 단순히 서버에 보관하는 형태이다.

 

HttpSession을 사용하지 않는 로직으로 변경 후 정상적으로 동작한다.

 

 

6. GitHub : 211005 logout


 

GitHub - bsh6463/blog

Contribute to bsh6463/blog development by creating an account on GitHub.

github.com

 

 

 

'Project > 블로그 게시판 만들기' 카테고리의 다른 글

글 삭제하기  (0) 2021.10.05
home 버튼 추가  (0) 2021.10.05
로그인 처리  (0) 2021.10.04
회원가입 개발  (0) 2021.10.04
도메인 모델, 연관관계  (0) 2021.10.03
Comments