-
JSP | SessionJAVA/JSP 2020. 2. 22. 22:36
Session
클라이언트에 세션 ID를 부여해서 클라이언트를 구분하는 방법
Session 개요
- 클라이언트와 서버 간 상태를 유지하는 방법 중 하나
- 클라이언트가 처음 접속했을 때 세션 ID를 부여하고 서버에 세션 ID 저장
- 클라이언트가 재접속했을 때 부여된 세션 ID를 이용해서 클라이언트 구분
- 쿠키에 비해 상태 유지가 훨씬 안정적이고 보안상의 문제도 해결
- 세션은 브라우저당 1개가 생성되며 웹 컨테이너에 저장됨
- 세션은 HashMap 컬렉션 형태로 key-value 저장
- 세션의 기본 유지 시간은 30분
- JSP에서는 session 내장 객체 사용
Cookie & Session 비교
쿠키와 세션은 둘 다 클라이언트 상태 유지를 위한 기능을 제공
그러나 다른 점이 많기 때문에 그 차이에 대해 정리구분 쿠키 세션 저장 위치 클라이언트 서버 저장 형식 텍스트 Object 만료 시점 쿠키 저장 시 설정 가능
설정하지 않는 경우 브라우저 종료 시 소멸클라이언트가 로그아웃 하거나
설정한 시간 동안 반응이 없을 경우 만료리소스 클라이언트 리소스 사용 서버 리소스 사용 용량 제한 한 도메인 당 20개
쿠리 하나당 4KB
총 300개서버가 허용하는 용량
Session Method
메소드 설명 void setAttribute(String name, Object value) 세션의 name 속성에 value 속성값 지정
로그인 아이디를 설정할 때 사용void setMaxInactiveInterval(int interval) 세션 유지 시간을 초 단위로 설정 Object getAttribute(String name) name 속성의 값을 Object 타입으로 리턴
속성명이 없는 경우 null 리턴Enumeration getAttribute() 속성의 이름들을 Enumeration 객체 타입으로 리턴 long getCreationTime() 1970년 1월 1일 0시 0초를 기준으로 현재 세션이 생성된 시간까지 경과한 시간을 1/1000초 값으로 리턴 String getId() 세션에 할당된 고유 식별자를 String 타입으로 리턴
브라우저를 구분하기 위해 필요하며 각 세션마다 다른 번호가 부여됨int getMaxInactiveInterval() 현재 세션에 설정된 유지 시간 반환 void invalidate() 현재 생성된 세션 무효화 void removeAttribute(String name) 속성명이 name인 속성 제거
JSP에서 Session 사용
Session 속성 설정
javax.sevlet.http 패키지의 HttpSession 인터페이스를 구현해서 사용
JSP에는 session 내장 객체가 있기 때문에 따로 생성하지 않아도 됨session.setAttribute(String name, Object value);
- name 속성에 value 속성값 할당
- 세션의 속성값으로는 객체 형태만 올 수 있음
- session 객체는 웹 브라우저와 매핑되므로 해당 웹 브라우저를 닫지 않는 한
같은 창에서 열린 페이지는 모두 같은 session 객체를 공유함
Session 속성을 이용해서 정보 유지
<!-- getAttribute(String name) --> String name = (String)session.getAttribute("name");
- 속성명에 해당하는 속성값 반환
- getAttribute() 메소드의 리턴 타입이 Object 이기 때문에
저장을 원하는 변수의 자료형으로 형 변환을 해주어야 함
Session 무효화
session.invalidate();
- 세션의 모든 속성이 제거되고 연결이 해제됨
예제
session의 속성을 설정해서 정보를 유지하고
form에 입력한 데이터 출력 후 session 유지를 해제하는 예제sessionForm.jsp
id와 pwd를 입력받는 JSP 페이지
데이터를 서버에 POST 방식으로 전달하고
sessionTest1.jsp 페이지로 이동<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>id pwd 입력</title> </head> <body> <form method="post" action="sessionTest1.jsp"> id:<input type="text" name="id"><p> pw:<input type="password" name="pwd"><p> <input type="submit" value="로그인"> </form> </body> </html>
sessionTest1.jsp
session 속성을 설정하고 form에 좋아하는 스포츠와 계절을 입력받는 페이지
입력 데이터를 POST 방식으로 서버에 전달
sesstionTest2.jsp로 페이지 이동<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>파라미터값 처리, 세션 설정</title> </head> <body> <% // 회원가입을 했다고 가정하고 id와 pwd 값을 전달 받음 String id = request.getParameter("id"); String pwd = request.getParameter("pwd"); System.out.println("id: " + id + ", pwd: " + pwd); // 세션 설정 session.setAttribute("idKey", id); // 세션 유지 기간 설정, 초 단위 session.setMaxInactiveInterval(60); %> <form method="post" action="sessionTest2.jsp"> <h2>가장 좋아하는 스포츠를 선택하세요</h2> <br> <input type="radio" name="sports" value="농구">농구 <input type="radio" name="sports" value="유도">유도 <input type="radio" name="sports" value="야구">야구 <input type="radio" name="sports" value="이종격투기">이종격투기 <br> <h2>가장 좋아하는 계절을 선택하세요</h2><br> <select name="season"> <option value="봄">봄</option> <option value="여름">여름</option> <option value="가을">가을</option> <option value="겨울">겨울</option> </select> <input type="submit" value="전송"> </form> </body> </html>
sessionTest2.jsp
세션 정보를 유지하며 세션 정보와
sessionTest1.jsp 에 입력한 데이터 출력<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>세션 유지, 세션 정보 출력</title> </head> <body> <% request.setCharacterEncoding("utf-8"); String sports = request.getParameter("sports"); String season = request.getParameter("season"); // 세션 정보 가져오기 // idKey 속성명에 해당하는 속성값 반환 String id = (String) session.getAttribute("idKey"); // 세션 고유 id 반환 String sessionId = session.getId(); // 세션 유지 시간 반환 int interval = session.getMaxInactiveInterval(); // id 값이 있는 경우 출력 if (id != null) { %> <b><%=id%></b>님이 좋아하는 스포츠와 계절은? <br /> <b><%=sports%>와 <%=season%>입니다.</b> <br /> 세션 id:<%=sessionId%> <br /> 세션 유지 시간: <%=interval%> <% // 출력 후 세션 연결 해제 session.invalidate(); } else { // id가 null인 경우 out.println("세션 연결 시간 초과. 재로그인 해주세요."); } %> </body> </html>
결과
HTTP 프로토콜에서 데이터를 유지하는 방법 중 하나인 세션에 대해 살펴보았습니다.
JSP에서는 session 내장 객체를 사용하며 브라우저당 1개의 객체를 공유하게 됩니다.
세션에 속성을 부여해서 클라이언트를 구분할 수 있으며 세션 유지 시간을 설정할 수도 있습니다.
쿠키와 세션이 JSP에서 사용되는 예제를 다루긴 했지만
쿠키와 세션은 다른 프로그래밍 언어에서도 사용되기 때문에
간략하게나마 알아두면 다른 언어에서 쿠키와 세션을 사용하게 될 때도 도움이 될 것입니다.'JAVA > JSP' 카테고리의 다른 글
JSP | 에러 처리 with XML (0) 2020.02.22 JSP | XML 기초 문법 & 서블릿 설정 (0) 2020.02.22 JSP | Cookie (0) 2020.02.22 JSP | JavaBean Action Tag 자바빈 연동 액션 태그 (0) 2020.02.20 JSP | JavaBean 자바빈 (0) 2020.02.20