FireDrago
[Servlet] 세션(Session) 본문
세션
- 브라우저 (사용자)당 하나가 제공된다.
- ServletContext : 애플리케이션당 하나 , Session : 사용자당 하나
- 서버의 메모리에 저장되기때문에 서버의 부담이 발생할 수 있다.
- 장바구니, 사용자추적 등 사용자마다 달라지는 데이터를 저장할때 사용한다.
세션 생성과정
- 클라이언트가 서버에 접속하면, 서버는 Session 객체를 생성
- 생성된 세션id를 브라우저 메모리의 세션쿠키에 저장한다. (쿠키형태)(jsessionID)
- 브라우저가 접속할때마다 세션쿠키에 저장된 id를 서버에 전달
- 서버는 전송된 세션id를 이용해 세션에서 작업수행
세션 사용방법
- 생성
HttpSession session = request.getSession();
HttpSession 클래스 객체의 생성은 HttpServletRequest의 getSession( ) 메서드를 사용한다.
- 주요메서드
| 반환 타입 | 메서드 | 설명 |
| Object | getAttribute(String name) | name을 가진 값을 가져온다 |
| Enumeration | getAttributeNames( ) | 세션 속성의 이름들을 반환 (while 문과 자주 쓰인다.) |
| long | getCreationTime( ) | 생성 날짜를 Long으로 반환 ( 날짜 클래스로 바꿔주는게 좋다) |
| String | getId( ) | 세션 id 가져오기 |
| int | getMaxInactivInterval( ) | 세션 유효기간 반환 |
| void | invalidate( ) | 세션 소멸 |
| boolean | isNew( ) | 원래 있던 세션인지, 새로 생성된 세션인지 알려준다. (신규회원인지 기존회원인지 확인) |
| void | removeAttribute(String name ) | name의 세션값을 삭제 |
| void | setAttribute (String name, Object value) |
세션속성 이름이 name인 속성에 속성 값으로 value 할당 |
| void | setMaxInactiveInterval (int interval) |
세션 유지시간을 '초'단위로 설정 (기본값 30분) |
세션을 이용한 로그인
protected void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
.....
//세션 생성
HttpSession session = request.getSession();
//form에서 입력받은 id와 pw 가져오기
String user_id = request.getParameter("user_id");
String user_pw = request.getParameter("user_pw");
if(session.isNew()) {
//세션을 처음 만들었는데, id가 입력된 경우 --> 세션에 등록 (가입)
if (user_id != null) {
session.setAttribute("user_id", user_id);
out.print("<a href='login'>로그인 상태확인 </a>");
}else {
//세션을 처음만들었는데, id가 입력안됨 ---> 다시 로그인화면
out.print("<a href='login2.html'> 다시 로그인하세요! </a>");
session.invalidate();
//세션 삭제
}
} else {
user_id = (String)session.getAttribute("user_id");
//세션이 원래 있었는데 id도 세션값과 일치 ----> 로그인
if (user_id != null && user_id.length() != 0) {
out.print("안녕하세요 " +user_id+"님!!");
} else {
//세션이 원래 있었는데 id가 세션과 불일치 ----> 다시 로그인 화면
out.print("<a href='login2.html'>다시 로그인 하세요!!</a>");
session.invalidate();
//세션삭제
}
}'프로그래밍 > Servlet' 카테고리의 다른 글
| [Servlet] MVC 패턴 업그레이드 하기 (0) | 2024.01.25 |
|---|---|
| [Servlet] MVC 패턴의 출현 (0) | 2024.01.24 |
| [Servlet] Servlet 사용법 (Request, Response) (0) | 2024.01.22 |
| [Servlet] 서블릿이란 (0) | 2024.01.19 |
| [Servlet] 포워드, 바인딩 (0) | 2023.07.04 |
