정리노트

[JSP] 세션

망고고래 2023. 12. 18. 15:09

13장. 세션

1. 개요

2. 세션 생성

3. 세션 정보

4. 세션 삭제

5. 세션 유효 시간 설정

 

 

 

1. 개요

세션이란?

클라이언트와 웹 서버간의 상태를 지속적으로 유지하는 방법

ex)다른 웹 페이지에 갔다가 돌아와도 로그인 상태 유지

①보안 유지에 유리(웹 서버에서만 접근 가능)

②데이터 저장에 한계 x

③웹 서버의 서비스를 제공받는 사용자를 구분하는 단위(세션은 웹 서버에 존재하는 객체, 웹 브라우저마다 하나씩 존재)

 

session 내장 객체 메서드 종류

메서드 반환 유형 설명
getAttribute(String name) java.lang.Object 세션 속성 이름이 name인 속성 값을 Object 형으로 반환(캐스팅 필요)
getAttributeNames() java.util.Enumeration 세션 속성 이름을 Enumeration 객체 타입으로 반환
getCreationTime() long 세션이 생성된 시간 반환(milisecond)
getId() java.lang.String 세션에 할당된 고유 ID(주민번호로 이해)
getLastAccessedTime() long 클라이언트가 마지막으로 request 보낸 시간 반환
getMaxInactiveInterval(int interval) int 세션 유지 시간 반환(최대 유지 시간), 기본 1800초
isNew() boolean 처음 생성된 세션이면 true, 이전에 생성된 세션이면 false
removeAttribute(String name) void 세션 속성 이름이 name인 속성 제거
setAttribute(String name, Object value) void 세션 속성 이름이 name인 속성에 value 할당
setMaxInactiveInterval(int interval) void 세션 유지 시간 설정(초 단위)
Invalidate()   현재 세션에 저장된 모든 세션 속성 제거

 

 

 

2. 세션 생성

세션 사용을 위해서는 세션 생성 필요

void setAttribute(String name, Object value) 사용
session.setAttribute("userId", "admin");

 

	<form action="session01_process.jsp" method="POST">
		<p>아이디: <input type="text" name="id">
		<p>비밀번호: <input type="text" name="passwd">
		<p><input type="submit" value="전송">
	</form>
String user_id = request.getParameter("id");
String user_pw = request.getParameter("passwd");

if(user_id.equals("admin")&&user_pw.equals("1234")){
    session.setAttribute("userID", user_id);
    session.setAttribute("userPW", user_pw);
    out.println("세션 설정에 성공했습니다<br>");
    out.println(user_id+"님 환영합니다");
}else{
    out.println("세션 설정에 실패했습니다");
}

 

 

2-1. 세션을 생성하는 또 다른 방법

1)request.getSession()

<%@ page session = "false" %>
<%
    HttpSession httpSession = request.getSession();
    List list = (List)httpSession.getAttribute("list");
    list.add(productId);
%>

 

2)<%@ page session = "true"%>(기본값)

세션 생성 후 session 내장 객체로 세션 사용 가능

<%@ page session = "true" %>
<%
    session.setAttribute("userInfo", userInfo);
%>

 

 

 

3. 세션 정보

3.1 단일 세션 정보 얻기

3.2 다중 세션 정보 얻기

 

3.1 단일 세션 정보 얻기

Object getAttribute(String name)

String id = (String)session.getAttribute("memberId");

 

getAttribute()의 반환 유형은 Object→형 변환 필요

 

예제

<%
    String user_id = (String)session.getAttribute("userID");
    String user_pw = (String)session.getAttribute("userPW");

    out.println("설정된 세션의 속성 값[1]: "+user_id+"<br>");
    out.println("설정된 세션의 속성 값[2]: "+user_pw);
%>

 

 

 

 

3.2 다중 세션 정보 얻기

Enumeration getAttributeNames();

Enumeration enum = session.getAttributeNames();

while(enum.hasMoreElements()){
    String name = enum.nextElement().toString();
    String value = session.getAttribute(name).toString();
}

 

예제

<%
    String name;
    String value;

    Enumeration en = session.getAttributeNames();
    int i = 0;

    while(en.hasMoreElements()){
        i++;
        name = en.nextElement().toString();
        value = session.getAttribute(name).toString();
        out.println("설정된 세션의 속성 이름 ["+i+"]: "+name+"<br>");
        out.println("설정된 세션의 속성 값 ["+i+"]: "+value+"<br>");
    }
%>

 

 

 

 

 

 

4. 세션 삭제

4.1 단일 세션 삭제

4.2 다중 세션 삭제

 

4.1 단일 세션 삭제(key값 삭제)

void removeAttribute(String name)

session.removeAttribute("memberId");

 

예제

<h4>――――세션 삭제 전――――</h4>
<%
    String user_id = (String)session.getAttribute("userID");
    String user_pw = (String)session.getAttribute("userPW");
    out.println("설정된 세션 이름 userID: "+user_id+"<br>");
    out.println("설정된 세션 값 userPW: "+user_pw+"<br>");

    session.removeAttribute("userID");
%>
<h4>――――세션 삭제 후――――</h4>
<%
    user_id = (String)session.getAttribute("userID");
    user_pw = (String)session.getAttribute("userPW");
    out.println("설정된 세션 이름 userID: "+user_id+"<br>");
    out.println("설정된 세션 값 userPW: "+user_pw+"<br>");

%>

 

 

예제2

<h4>――――세션 삭제 전――――</h4>
<%
    String name;
    String value;

    Enumeration en = session.getAttributeNames();
    int i = 0;

    while(en.hasMoreElements()){
        i++;
        name = en.nextElement().toString();
        value = session.getAttribute(name).toString();
        out.println("설정된 세션 이름 ["+i+"]: "+name+"<br>");
        out.println("설정된 세션 값 ["+i+"]: "+value+"<br>");
    }

    session.removeAttribute("userID");
%>

<h4>――――세션 삭제 후――――</h4>
<%
    en = session.getAttributeNames();
    i = 0;

    while(en.hasMoreElements()){
        i++;
        name = en.nextElement().toString();
        value = session.getAttribute(name).toString();
        out.println("설정된 세션 이름 ["+i+"]: "+name+"<br>");
        out.println("설정된 세션 값 ["+i+"]: "+value+"<br>");
    }
%>

 

 

 

4.2 다중 세션 삭제(전체 정보 삭제)

void invalidate()

session.invalidate();

 

예제: 모든 세션 속성 삭제

<h4>――――세션 삭제 전――――</h4>
<%
    String user_id = (String)session.getAttribute("userID");
    String user_pw = (String)session.getAttribute("userPW");

    out.println("설정된 세션 이름 userID: "+user_id+"<br>");
    out.println("설정된 세션 값 userPW: "+user_pw+"<br>");

    if(request.isRequestedSessionIdValid()==true){
        out.print("세션이 유효합니다.");
    }else{
        out.print("세션이 유효하지 않습니다.");
    }

    session.invalidate();
%>
<h4>――――세션 삭제 후――――</h4>
<%
    if(request.isRequestedSessionIdValid()==true){
        out.print("세션이 유효합니다.");
    }else{
        out.print("세션이 유효하지 않습니다.");
    }

%>

 

 

 

 

 

5. 세션 유효 시간 설정

void setMaxInactiveInterval(int interval)

session.setMaxInactiveInterval(60*60);

 

예제: 세션 유효 시간 설정, 출력

<h4>――――세션 유효시간 변경 전――――</h4>
<%
    int time = session.getMaxInactiveInterval()/60;

    out.println("세션 유효 시간: "+time+"분<br>");
%>
<h4>――――세션 유효시간 변경 후――――</h4>
<%
    session.setMaxInactiveInterval(60*60);
    time = session.getMaxInactiveInterval()/60;

    out.println("세션 유효 시간: "+time + "분<br>");
%>

 

 

예제: 세션 아이디, 유지 시간 출력

<%
    String session_id = session.getId();

    long last_time = session.getLastAccessedTime();
    long start_time = session.getCreationTime();

    long used_time = (last_time - start_time) / 60000;

    out.println("세션 아이디: " + session_id + "<br>");
    out.println("요청 시작 시간: " + start_time + "<br>");
    out.println("요청 마지막 시간: " + last_time + "<br>");
    out.println("웹 사이트의 경과 시간: " + used_time + "<br>");
%>

 

 

'정리노트' 카테고리의 다른 글

[JSP] 데이터베이스, JDBC  (0) 2023.12.20
[JSP]쿠키, 데이터베이스  (0) 2023.12.19
[JSP]  (0) 2023.12.15
[JSP] 필터  (0) 2023.12.14
[JSP] 시큐리티, 예외 처리, 필터  (0) 2023.12.13