JSP

JSESSIONID

아직 세션을 배우지는 않았지만 쿠키의 정보 중 JSESSIONID 에 대해서 의문을 가질 분들이 있을 것입니다. 세션 기술에서는 웹 브라우저로 세션ID를 보낼 때 쿠키 형태로 만들어서 전송하는데, JSESSIONID 가 바로 세션 정보를 저장한 쿠키 이름입니다.

 

세션(session)

쿠키를 설명할 때 (다른 페이지로 이동하더라도 그 전 페이지의 정보가 유지되어야 하는) 상태 유지를 위한 특별한 기법이 필요하다는 설명을 하였습니다. 상태 유지의 한 방법인 쿠키는 클라이언트의 컴퓨터에 정보를 저장하여 하드웨어에 저장해 두었던 정보를 가져와 페이지가 이동되더라도 상태가 유지되도록 합니다. 하지만 이 방법은 쿠키가 저장되는 디렉토리만 뒤지면 얼마든지 정보를 알아낼 수 있으므로 PC 방과 같이 여러 사람이 PC를 공유하는 경우에는 개인 정보가 유출될 수 있다는 우려가 있어 보안 유지가 되지 않는다는 단점이 있습니다. 또한 저장할 수 있는  데이터도 1.2MB로 한계가 있습니다.

 이러한 단점을 극복하기 위해서 나온 상태 유지 방법 중의 하나가 세션입니다. 세션은 다음과 같은 장점이 있습니다.

- JSP(서버)에서만 접근 가능하므로 보안 유지에 강력 합니다.

- 저장할 수 있는 데이터에 한계가 없습니다.

 세션은 서버 상에 존재하는 객체로서 브라우저 단위당 한 개씩 존재하게 됩니다. 세션은 웹 브라우저를 닫기 전까지 페이지를 이동하더라도 사용자의 정보를 잃지 않고 서버에 보관할 수 있도록 하는 객체입니다.

이러한 세션이 활용되는 대표적인 예는 로그인 페이지입니다. 회원 전용 페이지의 경우 로그인 과정을 통해 페이지를 사용할 수 있는 권한을 설정해야 합니다. 이러한 권한 설정을 할 때 세션이 사용됩니다.

 세션에 의해서 로그인 인증 처리를 하면 해당 페이지를 사용할 수 있는 권한에 대한 상태가 유지되기 때문에 다른 페이지로 갔다가 돌아오더라도 다시 로그인을 하지 않고 바로 회원 전용 페이지를 사용할 수 있게 됩니다.

 

HTTP 프로토콜은 비 상태 프로토콜이기에 기본적으로 이전의 정보를 저장하고 있지 못하는 데도 불구하고 다른 페이지로 이동했다 다시 이전 페이지로 돌아오더라도 로그인한 상태가 유지됩니다. 이는 내부적으로 세션을 활용하여 로그인 과정에서 해당 페이지를 사용할 수 있는 권한을 부여해 두었기 때문입니다.

 앞서도 언급했지만 이러한 세션은 웹 브라우저 당 하나씩만 발급됩니다. 이를 증명하기 위해서 웹 브라우저를 하나 더 새롭게 띄어 봅시다. 새롭게 띄운 웹 브라우저에는 해당 페이지를 사용할 수 있는 권한이 없음을 알 수 있습니다. 그러므로 새롭게 띄운 웹 브라우저에서 다시 로그인을 해야만 해당 사이트를 사용할 수 있는 권한을 부여 받을 수 있게 됩니다.

 

세션 사용하기

JSP 는 세션의 상태 관리를 위한 내장 객체 session을 제공합니다. 다음은 session에서 자주 사용되는 메소드를 정리한 표입니다.

메소드 설명
Object getAttribute(String name) 이름에 해당되는 객체 값을 가져온다. 없을 경우에는 null을 반환한다. 반환값은 Object 형이므로 반드시 형 변환을 하여 사용해야 한다.
Enumeration getAttributeNames() 세션에서 모든 객체의 이름을 Enumeration 형으로 얻어 준다.
long getCreationTime() 세션이 만들어진 시간을 반환한다.
String getId() 해당 세션을 가리키는 고유 id 값을 String 형으로 변환한다.
long getLastAccessedTime() 해당 세션이 클라이언트가 마지막으로 request를 보낸 시간을 long 형으로 반환한다.
int getMaxInactiveInterval() 사용자가 다음 요청을 보낼 때까지 세션을 쥬지하는 최대 시간(초 단위) 을 반환한다.
boolean isNew() 해당 세션이 처음 생성되었으면 true 값을 반환하고 이전에 생성된 세션이라면 false 를 반환한다.
void removeAttrubute(String name) 지정된 이름에 해당하는 객체를 세션에서 제거한다.
void setAttribute(String name, Object value) 세션에 지정된 이름에 객체를 추가한다.
void setMaxInactiveInterval(int iterval) 사용자가 다음 요청을 보낼 때까지 세션을 유지하는 최대 시간(초 단위)을 설정한다. 이 시간을 넘기면 서블릿 컨테이너는 세션을 종료한다.
void invalidate() 해당 세션을 없애고 세션에 속해있는 값들을 없앤다.

 

상태유지를 위해서는 세션에 값을 저장한 후 이를 가져와서 사용합니다. 이를 위해서는 세션에 값을 저장하는 setAttribute() 와 세션에 저장된 값을 

얻기 위한 getAttribute() 가 사용됩니다.

다음은 setAttribuet() 의 기본 형식입니다.

 

session.setAttribuet(String name, Object value);

 

setAttribute() 로 세션에 값을 지정할 때 원하는 값을 찾아오기 위해서 이름을 지정해 주어야 하는데, setAtribuet() 의 기본 형식에서 볼 수 있듯이 저장한 값을 식별하기 위한 이름은 String 형이어야 합니다.  세션에 저장하는 값은 Object 형이므로 어떠한 자료 형태라도 저장할 수 있습니다.

 

다음은 세션에 "PinkSung" 이란 문자열 값을 "ID" 이란 이름으로 저장하는 예입니다.

 

session.setAttribute("id", "pinksung");

 

이제 세션에 값을 저장하는 예제를 만들어 봅시다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%

    session.setAttribute("id", "pinksung");
    session.setAttribute("pwd", "test1234");
    session.setAttribute("age", 20);

%>

<h3> 세션 설정</h3>

<a href="05_getSession.jsp" >가기</a>

</body>
</html>
 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h3>세션 값 얻어오기</h3>

<%
    String id =(String) session.getAttribute("id");
    String pwd =(String)session.getAttribute("pwd");
    Integer age =(Integer)session.getAttribute("age");

%>


id : <%= id %> <br>
pwd : <%= pwd %> <br>
age : <%= age %> <br>

</body>
</html>
 

 

세션 값 얻어오기

id : pinksung
pwd : test1234
age : 20

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

No song, no supper. (일하지 않는 자는 먹지를 말라.)

댓글 ( 4)

댓글 남기기

작성

JSP 목록    more