쌓고 쌓다

세션 사용하기 본문

프로그래밍/spring

세션 사용하기

승민아 2023. 9. 12. 09:29

 

SessionConst

package com.example.demo.session;
public class SessionConst {
    public static final String LOGIN_MEMBER = "loginMember";
}

HttpSession에 데이터를 보관하고 조회할 때, 자주 사용되므로 상수를 정의하여 사용할 수 있다.

 

신규 세션 등록

@GetMapping("kakao/test")
public String kakaoOauth(HttpServletRequest request) {

    //로그인 후. Member 반환
    Member member = kaKaoUser.login(token.get("access_token"));

    HttpSession session = request.getSession();
    session.setAttribute(SessionConst.LOGIN_MEMBER, member);
    return "redirect:/";
}
  • request.getSession(true) : getSession()과 동일
    • 세션이 있으면 기존 세션을 반환
    • 세션이 없으면 새로운 세션을 생성해서 반환
  • request.getSession(false)
    • 세션이 있으면 기존 세션을 반환
    • 세션이 없으면 새로운 세션을 생성하지 않고 null을 반환한다.
  • session.setAttribute : 세션에 로그인 회원의 정보인 member를 저장

 

세션 삭제

@GetMapping("/logout")
public String logout(HttpServletRequest request) {
    HttpSession session = request.getSession(false);
    if(session!=null) {
        session.invalidate();
    }
    return "redirect:/";
}
  • session.invalidate()로 세션을 제거

 

세션 조회

@GetMapping("/")
public String home(HttpServletRequest request, Model model) {
    HttpSession session = request.getSession(false);
    if(session==null) {
        return "home";
    }

    Member loginMember = (Member)session.getAttribute(SessionConst.LOGIN_MEMBER);
    if(loginMember==null) {
        return "home";
    }

    model.addAttribute("member", loginMember);
    return "loginHome";
}
  • request.getSession(false)
    • getSession(true)로 하면 로그인하지 않은 사용자에게 의미 없는 세션이 생성된다.
    • 세션을 찾는 과정에서는 false로 세션을 생성하지 않도록 해야한다.
  • session.getAttribute
    • 세션 생성시 보관한 회원 객체를 찾는다.

 

@SessionAttribute 사용

스프링에서 세션을 더 편리하게 사용할 수 있도록 어노테이션을 지원한다.

 

이미 로그인된. 즉 세션을 가진 사용자를 조회할 때 아래와 같이 사용하자. 이 코드는 세션을 생성하지 않는다.

@SessionAttribute(name=SessionConst.LOGIN_MEMBER, required = false) Member loginMember

 

@GetMapping("/")
public String home(@SessionAttribute(name=SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) {

    if(loginMember==null) {
        return "home";
    }

    model.addAttribute("member", loginMember);
    return "loginHome";
}

 

첫 로그인시 아래의 URL처럼 jsessionid를 포함할 수 있으므로 아래의 설정을 추가해주자.

 

application.properties

server.servlet.session.tracking-modes=cookie
Comments