[JSP]세션

2023. 12. 18. 15:17· 공부/JSP
목차
  1. HTTP는 비연결형 프로토콜
  2. 세션이란?
  3. 세션의 개요
  4. 세션(session)
  5. 세션 생성
  6. 세션 생성
  7. 세션 정보
  8. 단일 세션 정보 얻기
  9. 다중 세션 정보 얻기
  10. 세션 삭제
  11. 단일 세션 삭제하기
  12. 다중 세션 삭제하기
  13. 세션 유효 시간 설정
  14. 세션 유효 시간
반응형

HTTP는 비연결형 프로토콜

  • 한 페이지가 출력된 다음에는 클라이언트와 서버의 연결이 끊어짐
  • 요청에 대한 응답을 서버가 전송하며 나면 연결 끊어짐
  • 브라우저와 서버 간의 상태에 대한 보존 없이 매 순간 순간 새로운 연결
  • 한번 로그인한 사용자가 로그아웃할 때까지 페이지를 이동해도 보관해야 할 정보가 있다면 이에 대한 처리가 매우 곤란짐 : HTTP 프로토콜의 한계

→ 세션, 쿠키

세션이란?

  • 웹 서버에 웹 클라이언트 마다 각기 다른 정보를 일시적으로 저장하여 사용하기 위한 객체
  • 클라이언트의 정보를 서버에 가지고 있다가 다시 해당 클라이언트의 또 다른 요쳥이 왔을 때 저장된 정보와 비교해 동일한 브라우저인지 판단
  • 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법
  • 웹 서버에서만 접근이 가능하므로 보안 유지에 유리, 서버에 부담

세션의 개요

세션(session)

  • 오직 웹 서버에 존재하는 객체로 웹 브라우저마다(사용자 별로) 하나씩 존재하므로 웹 서버의 서비스를 제공받는 사용자를 구분하는 단위가 됨
  • 웹 브라우저를 닫기 전까지 웹 페이지를 이동하더라도 사용자의 정보가 웹 서버에 보관되어 있어 사용자 정보를 잃지 않음
  • 일정시간 유지(기본 30분)되고 새로운 요청 하지 않으면 자동 해제.

Untitled.pngUntitled.png

세션 생성

세션 생성

  • session 내장 객체의 setAttribute() 메소드를 사용
void setAttribute(String name, Object value) 
  • 첫 번째 매개변수 : name
    • 세션으로 사용할 세션 속성 이름
    • 세션에 저장된 특정 값을 찾아오기 위한 키로 사용
  • 두 번째 매개변수 value : 세션의 속성 값
    • 세션 속성 값은 Object 객체 타입만 가능
    • int, double, char 등의 기본 타입은 사용할 수 없음

setAttribute() 메소드 사용 예

session.setAttribute("memberId", "admin"); 

Untitled.png

<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>


- session01_process.jsp 

<%
		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("세션 설정이 실패했습니다.");
		}
				
	%>

세션 정보

단일 세션 정보 얻기

  • getAttribute() 메소드를 사용
Object getAttribute(String name) 
  • getAttribute() 메소드는 반환 유형이 Object 형이므로 반드시 형 변환을 하여 사용해야 함
String id = (String)session.getAttribute("memberId"); 

→ 해당 속성 이름이 없는 경우 null

Untitled.png

<%
String user_id = (String) session.getAttribute("userID");
String user_pw = (String) session.getAttribute("userPW");
// (String) 강제 형변환을 사용하는 이유는
// setAttribute의 값은 Object형태 이기 때문에
out.println("설정된 세션의 속성 값 [1] : " + user_id +"<br>");
out.println("설정된 세션의 속성 값 [2] : "+ user_pw + "<br>");
%>

다중 세션 정보 얻기

Enumeration getAttributeNames(); 

Untitled.png

Enumeration == 열거형

enum.hasMoreElements() 는 해당 열거형의 값이 있으면 true 없으면 false

while문 안에서 nextElement() 를 사용하기 때문에 열거형에서 다음 순서로 넘어간다.

  • toString 사용 이유 : Enumeration은 object 형식이기 때문에 String 형식으로 형변환하여 출력

세션 삭제

단일 세션 삭제하기

  • 세션에 저장된 하나의 세션 속성 이름을 삭제
  • removeAttribute() 메소드를 사용
void removeAttribute(String name) 
  • removeAttribute() 메소드 사용 예
session.removeAttribute("memberId"); 

Untitled.png

<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.println("세션이 유효하지 않습니다.");
	}
	
	
	session.invalidate();
	%>
	
	<h4>-----세션을 삭제한 후-----</h4>
	<%
	if (request.isRequestedSessionIdValid() == true) {
		out.print("세션이 유효합니다.");
	} else {
		out.println("세션이 유효하지 않습니다.");
	}
	%>

다중 세션 삭제하기

  • 세션에 저장된 모든 세션 속성 이름을 삭제
  • invalidate() 메소드를 사용
void invalidate() 
  • invalidate() 메소드 사용
session.invalidate()  

Untitled.png

<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.println("세션이 유효하지 않습니다.");
	}
	
	
	session.invalidate();
	%>
	
	<h4>-----세션을 삭제한 후-----</h4>
	<%
	if (request.isRequestedSessionIdValid() == true) {
		out.print("세션이 유효합니다.");
	} else {
		out.println("세션이 유효하지 않습니다.");
	}
	%>

세션 유효 시간 설정

세션 유효 시간

  • 세션을 유지하기 위한 세션의 일정 시간
  • 웹 브라우저에 마지막 접근한 시간부터 일정 시간 이내에 다시 웹 브라우저에 접근하지 않으면 자동으로 세션이 종료
  • session 내장 객체의 setMaxInactiveInterval() 메소드를 사용
  • 초 단위 설정
void setMaxInactiveInterval(int interval) 

[사용 예]

session.setMaxInactiveInterval(60*60) // == 1시간 

ArrayList

  • 전통적인 배열 :
    • 배열 생성시 배열의 크기가 고정.
    예) int[] num=new int[10] ;   //크기가 10인 배열 생성
    • 데이터의 개수가 배열의 크기보다 많아지면 저장 불가능.
    • 배열의 크기 크게 하면 공간 낭비.
    • [ ] 사용하여 요소 접근
  • ArrayList 클래스
    • 저장되는 데이터의 개수에 따라 자동적으로 크기 변경.
    • 즉, 요소가 가득 차게 되면 크기를 동적으로 증가.
    • 삭제되면 크기가 줄어듬. 자동으로 변경하면서 사용 가능.
    • ( )로 요소 접근

→ 실행 도중에 배열의 크기를 변경할 수 있는 동적 배열임

ArrayList <자료형> list = new ArrayList<자료형>();

// 요소들 리스트에 추가 : add() 메서드
list.add(“철수”); 

// 리스트에서 요소 삭제 : remove() 메서드
list.remove(1);  //첫번째 요소 삭제

// 리스트 요소 가져오기 : get() 메서드
String s =list.get(1);  //첫번째 요소 반환

// 리스트의 각 요소 출
for(int i=0;i<list.size();i++) {
   out.println(list.get(i) + "<br>");
}
반응형
  1. HTTP는 비연결형 프로토콜
  2. 세션이란?
  3. 세션의 개요
  4. 세션(session)
  5. 세션 생성
  6. 세션 생성
  7. 세션 정보
  8. 단일 세션 정보 얻기
  9. 다중 세션 정보 얻기
  10. 세션 삭제
  11. 단일 세션 삭제하기
  12. 다중 세션 삭제하기
  13. 세션 유효 시간 설정
  14. 세션 유효 시간
'공부/JSP' 카테고리의 다른 글
  • [JSP]자바빈즈 액션태그
  • [JSP]서블릿과 웹 MVC
  • [JSP]폼 태그
  • [JSP]내장 객체
Future0_
Future0_
rm -rf /
Future0_
Luna Developer Blog
Future0_
전체
오늘
어제
  • 분류 전체보기 (112)
    • 프로그래밍 (4)
      • 알고리즘 (4)
    • 보안 (14)
      • Dreamhack (4)
      • Hackthebox (1)
      • Webhacking (9)
    • 프로젝트 (4)
    • 공부 (80)
      • Database (2)
      • Python (11)
      • System (4)
      • Java (13)
      • JSP (13)
      • Spring (11)
      • Kotlin (16)
      • 자료구조 (10)
      • 기계학습 (0)
    • Docker (4)
    • Github (2)
    • Tip (1)
    • 잡담 (2)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 자바빈즈
  • shared preference
  • 디버깅키해시
  • android studio 삭제
  • Java
  • 코틀린기본문법
  • 상속
  • React
  • docker
  • dreamhack
  • 자료구조
  • Database
  • spring
  • 보안
  • Android Studio
  • Computer science
  • 프로그래밍
  • 1.9.22
  • 알고리즘
  • 컴퓨터
  • SpringBoot
  • ViewModel
  • 키 해시
  • webhacking
  • Kotlin
  • jsp
  • native app
  • Python
  • api 통신
  • cs

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
Future0_
[JSP]세션
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.