본문 바로가기
Study/중앙정보처리학원과정

57일차. Session

by 얏옹이 2023. 1. 11.
반응형

Session은 눈에 보이지않는다. 하지만 엄연히 존재하고, 우리가 지금도 사용하고, 보고있는 Web Page상에 생성되고, 그리고 저장할 값을 가지고 돌아다닌다.

 

Session은 서버 상에 존재하는 객체이다. 1 browse당 1개씩 존재 한다. browser에 존재하는것이기때문에 browse를 닫기 전까지는 저장된 정보를 잃지 않고 서버에 보관할수 있다. 이러한 기능을 하는 객체이다.

 

Session이 가장 대표적으로 사용되는 기능이 바로 Login 기능이다.

 

회원만 볼수있는 Page가 있다고 가정하자, 그럼 우리는 Login을 통해 회원 자격으로 해당 Page에 입장을 하고, 우리가 그 Page에 머무는 동안은 Login한 정보가 Session에 저장되어 유지됨으로 Page에서 다른 Page로 이동하더라도 Login 정보가 남아있으니 지속적으로 해당 Page를 이용이 가능하다.

 

앞서 말했듯이 Browser당 1개씩만 존재하기때문에 다른 Browse를 이용하여 해당 Page에 접근하면 Session이 없기때문에 접근이 불가능하다. 따라서 새롭게 Login 처리를 해줘야 접근이 가능해지는것이다.

 

좀더 쉬운 예를 들자면 우리가 많이, 그리고 자주 쓰는 Naver에 Login을 해보자. 그리고 검색도 하고 쇼핑도 들어가고

카페도 들어가고 메일도 들어가고 다른사이트도 들어가고 이것저것 둘러보다가 다시 Naver의 Main화면으로 이동해보자.

 

로그인이 풀려있는가? 그렇지 않다. 이것이 바로 Session이다.

 

반응형

 

Session의 내장객체에 대해 알아보자.

 

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

 

 

세션에 값을 설정해보겠다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session</title>
</head>
<body>
	<h1>세션을 설정해주었습니다</h1>
<%
	session.setAttribute("id", "deft");
	session.setAttribute("pwd", "369369");
	session.setAttribute("age", "28");
%>
</body>
</html>

 

"id", "pwd", "age"라는 이름의 Session에 값들을 각각 "deft", "369369", "28"을 넣어주었다.

 

이제 Session의 값을 가져와보겠다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session</title>
</head>
<body>
	<h1>세션을 설정해주었습니다</h1>
<%
	session.setAttribute("id", "deft");
	session.setAttribute("pwd", "369369");
	session.setAttribute("age", "28");
%>
<ul>
	<li>id라는 이름의 세션값:<%=session.getAttribute("id") %></li>
	<li>pwd라는 이름의 세션값:<%=session.getAttribute("pwd") %></li>
	<li>age라는 이름의 세션값:<%=session.getAttribute("age") %></li>
	<li>session 생성 시간:<%=session.getCreationTime() %></li>
</ul>



</body>
</html>

 

이렇게 getAttribute를 이용하여 Session의 이름값을 매개변수로 주면, 그 값을 반환한다.

 

이걸 각각 변수에 담기 위해서는 Object타입을 반환하기때문에 강제로 형변환이 필요하다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session</title>
</head>
<body>
	<h1>세션을 설정해주었습니다</h1>
<%
	session.setAttribute("id", "deft");
	session.setAttribute("pwd", "369369");
	session.setAttribute("age", "28");
	
	String id = (String)session.getAttribute("id");
	String pwd = (String)session.getAttribute("pwd");
	String age = (String)session.getAttribute("age");
%>
<ul>
	<li>id라는 이름의 세션값:<%=id%></li>
	<li>pwd라는 이름의 세션값:<%=pwd%></li>
	<li>age라는 이름의 세션값:<%=age%></li>
	<li>session 생성 시간:<%=session.getCreationTime() %></li>
</ul>



</body>
</html>

 

세션의 유효시간을 설정해줄수가 있다. 메서드를 이용하는 방법이 있고 Web.xml에서 설정해주는 방법이 있다.

 

매번 설정하는거보다 Web.xml에 설정하여 공통적으로 사용하는것이 좀더 수월할거같다.

 

Server에서 (프로젝트내의 Web.xml이 아님) Web.xml로 가보면

 

<session-config>
        <session-timeout>30</session-timeout>
    </session-config>

 

부분이 있다. 아마 Default 값으로 30이라고 되어있다. 이것은 기본이 분단위기때문에 30분동안 Session이 유지된다는 이야기이다. 이부분의 숫자를 바꾸면 된다.

 

 

반응형