Java/Spring Boot

[Java / Spring Boot] Session

2025. 1. 15. 15:31

Session

웹 애플리케이션에서 사용자와 서버 간의 상태 정보를 유지하기 위한 기술

  • 사용자가 웹 애플리케이션과 상호작용하는 동안 정보를 서버에 저장
  • 사용자의 상태를 추적하고, 여러 페이지를 이동하면서도 사용자 정보 유지
  • 브라우저 마다 세션 Id가 다름

HttpSession

웹 애플리케이션에서 사용자의 상태를 유지하는데 사용되는 인터페이스

  • HTTP는 무상태 프로토콜 (stateless protocol)
  • 각각의 요청은 독립적이며 상태를 저장하지 않음
  • 세션을 사용하여 사용자 별로 상태나 정보를 서버에 저장
  • 여러 요청에 사용자 정보 추적

 

Login 기능

  • 로그인에 실패할 시 `login?error`로 리다이렉트
@GetMapping("/login")
public String login() {
    return "/WEB-INF/views/member/login.jsp";
}

@PostMapping("/login")
public String login(@ModelAttribute MemberDto memberDto,
                            HttpSession session) {
    MemberDto findDto = memberDao.selectOne(memberDto.getMemberId());
    if(findDto == null) {
        return "redirect:login?error";
    }
    boolean isValid = findDto.getMemberPw().equals(memberDto.getMemberPw());
    if(isValid) {
        session.setAttribute("userId", findDto.getMemberId());
        memberDao.updateMemberLogin(findDto.getMemberId());
        return "redirect:/";
    }
    else {
        return "redirect:login?error";
    }
}

.setAttribute()

HTTP 세션에 데이터를 저장하는 메서드

  • `key=value`로 `Map<string, object>` 형태로 정보 저장
  • 보안 수준이 높아 중요한 정보 저장 가능 (`key`는 16진수 32자리)
  • 최소한의 정보만 저장하는 것이 원칙
session.setAttribute("userId", findDto.getMemberId());

 

Logout 기능

@RequestMapping("/logout")
public String logout(HttpSession session) {
    session.removeAttribute("userId");
    //session.invalidate();
    return "redirect:/";
}

.removeAttribute()

HTTP 세션에서 저장된 데이터를 제거하는 메서드

  • 사용자가 통신을 30분 동안 하지 않으면 자동 삭제
    • 시간은 설정으로 조정 가능
    • 그 사이에 통신이 발생하면 다시 30분간 연장
    • 삭제되는 것을 세션이 만료되었다고 표현
session.removeAttribute("userId");

 

.invalidate()

HTTP 세션 객체 자체를 무효화하는 메서드

session.invalidate();

 

Mypage 기능

@RequestMapping("/mypage")
public String mypage(HttpSession session, Model model) {
    String userId = (String) session.getAttribute("userId");
    MemberDto memberDto = memberDao.selectOne(userId);
    model.addAttribute("memberDto", memberDto);
    return "/WEB-INF/views/member/mypage.jsp";
}

.getAttribute()

HTTP 세션에서 저장된 데이터를 가져오는 메서드

  • `String`으로 다운캐스팅하여 가져옴
String userId = (String) session.getAttribute("userId");

JSP 세션 내장 객체

 

pageContext.session.id

현재 세션의 고유 식별자 (세션 ID)

  • 현재 HTTP 세션에 대한 참조를 제공하는 내장 객체
세션ID : ${pageContext.session.id}

 

sessionScope.userId

세션에 저장된 데이터(`userId`)

  • 현재 HTTP 세션에 저장된 속성에 대한 참조를 제공하는 내장 객체
userId : ${sessionScope.userId}

 

'Java > Spring Boot' 카테고리의 다른 글

[Java / Spring Boot] DBCP  (0) 2025.02.10
[Java / Spring Boot] AOP와 Interceptor, Configuration  (2) 2025.01.15
[Java / Spring Boot] Model과 MVC 패턴  (0) 2025.01.14
[Java / Spring Boot] Forward와 Redirect  (0) 2025.01.14
[Java / Spring Boot] View (JSP)  (0) 2025.01.09
'Java/Spring Boot' 카테고리의 다른 글
  • [Java / Spring Boot] DBCP
  • [Java / Spring Boot] AOP와 Interceptor, Configuration
  • [Java / Spring Boot] Model과 MVC 패턴
  • [Java / Spring Boot] Forward와 Redirect
개발하는 벌꿀오소리
개발하는 벌꿀오소리
겁없는 벌꿀오소리처럼 끊임없이 도전하자!
  • 글쓰기 관리
  • 개발하는 벌꿀오소리
    벌꿀오소리의 개발 노트
    개발하는 벌꿀오소리
  • 전체
    오늘
    어제
    • 분류 전체보기 (74)
      • Java (60)
        • 기본 (23)
        • 모듈 (8)
        • 자료구조 (5)
        • 알고리즘 (0)
        • 파일 입출력 (5)
        • JDBC (5)
        • Spring Boot (14)
      • Oracle (13)
      • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 공지사항

  • hELLO· Designed By정상우.v4.10.3
개발하는 벌꿀오소리
[Java / Spring Boot] Session
상단으로

티스토리툴바