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 |