일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 썸머노트
- 오라클월별데이터
- 오라클주별데이터
- 스프링 부트가 해결하려고 했던 문제
- 자바
- 자바 기초
- HTML
- 스프링 구글차트로 기간별 현황 조회하기
- 오라클통계
- 자바왕기초
- 자바기초
- Spring Boot가 해결하려고 했던 문제
- 스프링 구글차트
- 스프링과 스프링부트 차이점
- jsp
- 자바 왕기초
- 자바왕초보
- 스프링 에러
- 세션
- 오라클일별데이터
- java
- 오라클
- 오라클클라우드에 젠킨스 설치하기
- maven
- 스프링 Ioc Container
- 제이쿼리
- 스프링 제어역전
- 스프링
- 스프링 Ioc
- CSS
- Today
- Total
Just Do it
세션(Session)이란? 본문
1. 세션이란?
- 세션: 쿠키를 이용하여 서로 관련된 요청과 응답들을 하나로 묶은 것. 브라우저마다 가지고 있는 개별 저장소와 같다.
- 서버에서 브라우저마다 세션 객체를 제공하며 세션은 서버에 저장된다.
- 원래는 요청과 응답이 독립적인데 서버에서 쿠키를 이용해서 세션 아이디를 브라우저에 보내줌으로써 그 이후 요청부터는 같은 세션 아이디 아래 요청이 포함되게한다. 그래서 요청과 응답들이 하나로 묶일 수 있는 것이다. 쉽게 생각하면 로그인부터 로그아웃까지가 하나의 세션이다.
2. 세션의 생성 과정
- 처음에 브라우저가 서버에 요청을 하면 서버는 무조건 세션 객체 하나를 만든다.
- 그리고 서버는 이 세션을 쓸 수 있는 세션 아이디가 담긴 쿠키를 만들어 브라우저에 응답을 보낸다.
- 브라우저에는 서버에서 보낸 세션아이디가 담긴 쿠키가 저장되고 브라우저에서 서버에 요청을 보낼때마다 이 쿠키를 사용한다.
- 서버는 브라우저에서 보낸 세션 아이디를 비교하여 같은 브라우저에서 온 요청인지 확인할 수 있다.
3. 세션 객체 얻기
- 쿠키는 브라우저마다 저장되므로 브라우저마다 다른 세션 아이디를 갖는다.
- 같은 컴퓨터라고 하더라도 브라우저가 다르면 세션 아이디가 다르다.
4. 세션과 관련된 메서드
메서드 | 설명 |
String getId() | 세션의 ID를 반환 |
long getLastAccessedTime() | 세션 내에서 최근 요청을 받은 시간을 반환 |
boolean isNew() | 새로 생성된 세션인지를 반환. request.getSession() 호출 후 사용 |
void setMaxInactiveInterval(int interval) | 세션 예약 종료. 지정된 시간(초)후에 세션을 종료 (예약 종료) |
void invalidate() | 세션 즉시 종료. 세션 객체를 제거 (저장된 객체도 함꼐) |
int getMaxInactiveInterval() | 예약된 세션 종료 시간을 반환 |
*아래 표는 pageConext, request, session, application 네 가지 기본 객체에서 모두 사용되는 메서드이다.
속성 관련 메서드 | 설명 |
void setAttribute(String name, Object value) | 지정된 값(value)을 지정된 속성 이름(name)으로 저장 |
Object getAttribute(String name) | 지정된 이름(name)으로 저장된 속성의 값을 반환 |
void removeAttribute(String name) | 지정된 이름(name)의 속성을 삭제 |
Enumeration getAttributeNames() | 기본 객체에 저장된 모든 속성의 이름을 반환 |
5. 세션의 종료
5.1 수동 종료
HttpSession session = request.getSession();
session.invalidate(); // 1. 세션을 즉시 종료
session.setMaxInactiveInterval(30*60); // 2. 예약 종료 (초단위), 30분 후 종료
5.2 자동 종료
<session-config>
<session-timeout>30</session-timeout> // 분 단위. 30분 후 종료
</session-config>
6. 쿠키와 세션 비교
쿠키(Cookie) | 세션(HttpSession) |
브라우저에 저장 | 서버에 저장 |
서버 부담 X | 서버 부담 O |
보안에 불리 | 보안에 유리 |
서버 다중화에 유리 | 서버 다중화에 불리 |
***
7. 참고 사항
*loginForm.jsp 파일의 <body> 내에 있는 <form> 태그 내 action="경로" 입력시 큰 따옴표 안에 아래와 같이
<c:url value='/경로'/>로 넣어줘야한다. 그래야 쿠키 생성 차단을 한 클라이언트의 세션ID가 계속 바뀌는걸 방지하여 서버 부담을 줄일 수 있다.
<body>
<form action="<c:url value='/login/login'/>" method="post" onsubmit="return formCheck(this);">
*세션 객체를 얻어 올 때:
// 세션 객체를 얻어오기. 메서드의 매개변수로 HttpServletRequest request 를 추가해줘야한다.
HttpSession session = request.getSession();
// 세션 객체에 id를 저장한다.
session.setAttribute("id", id);
// 세션 객체에 저장된 id를 가져온다.
session.getAttribute("id")
'신입 개발자가 되기 위해 공부했던 독학 자료들 > 자꾸 까먹는 기본 개념 모음' 카테고리의 다른 글
[스프링 기초 개념] pom.xml과 Maven이 무엇일까? (0) | 2022.02.16 |
---|---|
세션(session)을 시작할까? (0) | 2022.02.08 |
쿠키(Cookie)란? (0) | 2022.02.08 |
[스프링] 모델 2와 스프링 MVC (0) | 2022.02.07 |
[스프링] 스프링 프로젝트의 로딩 구조 (0) | 2022.02.07 |