세션(Session) 이란
- 네트워크 환경에서 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하기 위한 방법을 의미
- 세션은 서버 공간에 생성되므로 보안 유지에 유리하지만 데이터를 저장하기 위한 한계성(유저가 많아지면 서버에 부하를 줄 수 있다)에 대한 문제는 존재함
- 세션은 클라이언트의 요청에 따라 접속된 웹 서버와 가상으로 연결된 상태를 유지하도록 해 줌
- 세션 서버에 저장해 놓고 공유 또는 전달을 함
세션에 의한 클라이언트 구분
- 세션은 웹 서버 공간에 생성되는 객체로 웹 브라우저마다 하나씩 존재하며 웹 서버와의 접속을 통해 생성된 세션은 네트워크 환경에서 여러 사용자 중 특정인에 대한 구분자의 역할을 수행
- 세션을 통해 접속된 웹 브라우저를 닫기 전까지는 웹페이지를 이동하더라도 사용자에 대한 정보가 웹 서버에 객체 상태로 저장되어 있으므로 사용자 정보를 지속적으로 활용할 수 있게 됨.
세션 생성
session 내장 객체
- 웹 브라우저에서 웹 서버에게 서비스를 요청할 경우 요청한 웹 브라우저에 관한 정보를 저장하고 관리하는 역할을 수행
- session 객체는 웹 브라우저당 1개의 세션이 할당되도록 하려면 page 디렉티브의 session 속성이 true로 설정되어 있어야 함.
메서드의 종류
세션 생성하는 setAttribute() 메서드
- 세션을 생성할 때는 session 내장 객체의 setAttribute() 메서드를 사용하여 다음과 같이 생성
void setAttribute(String name, Object value)
- name : 사용할 세션의 이름, value : 세션의 속성 값
예제
- txt파일에 저장되어 있는 모든 id pw 들을 검사하여 계정이 존재한다면 사용자의 이름을 출력하는 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import = "java.io.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션 생성</title>
</head>
<body>
세션 생성하여 ID PW 맞는지 확인하기
<hr>
<%
request.setCharacterEncoding("UTF-8");
String id = request.getParameter("id");
String pw = request.getParameter("passwd");
BufferedReader reader = null;
try{
String filePath = application.getRealPath("/WEB-INF/account.txt");
reader = new BufferedReader(new FileReader(filePath));
while (true){
String str = reader.readLine();
if(str ==null){
break;
}
String[] result = str.split(" ");
String uid = result[0];
String upw = result[1];
String name = result[2];
if(id.equals(uid) && pw.equals(upw)){
session.setAttribute("memberId" , id);
session.setAttribute("memberPw", pw);
out.println("새로운 세션 생성 성공 ! <br>");
out.println("[ " + name + " ]님이 입장하셨습니다. ");
break;
}
else{
out.println("세션 생성 실패 ! <br>");
out.println("다시 시도해 보세요.<br>");
}
}
}catch (FileNotFoundException fnfe){
out.println("파일이 존재하지 않습니다.");
}catch (IOException ioe){
out.println("파일을 읽을 수 없습니다.");
}finally{
try{
reader.close();
}catch(Exception e){
out.println("reader 닫기 에러발생");
}
}
%>
<p> 아이디 : <%= id %>
<p> 비밀번호 : <%= pw %>
</body>
</html>
세션 정보 확인
1. 단일 세션 정보
- getAttribute() 메서드를 사용하여 세션에 저장된 하나의 세션 속성 이름에 대한 속성을 가져오려면 다음과 같이 선언
Object getAtttribute(String name)
- getAttribute() 메서드의 반환 유형은 Object 형이므로 반드시 형 변환을 수행한 다음 사용해야 함
- 괄호 안의 name 매개변수는 세션에 저장된 속성의 이름을 의미하며 name을 선언하지 않게 되면 null의 값을 반환해 줌
- getAttribute() 메서드를 사용하여 memberId 세션의 정보를 가져오려면 memberId 값이 String 형인 space 라면 캐스트 연산자를 사용하여 형 변환을 다음과 같이 수행해야 함
String id = (String) session.getAttribute("memberId")
String pw= (String) session.getAttribute("memberPw")
2. 다중 세션 정보
- getAttributeNames() 메서드를 사용하여 세션에 저장된 여러 개의 세션 속성 이름에 대한 속성을 가져오려면 다음과 같이 선언
<%@ page import = "java.util.Enumeration"%>
Enumeration en = session.getAttributeNames();
- getAttributeNames() 메서드의 반환 유형은 Enumeration 객체 타입이므로 page 디렉티브 태그의 import 속성을 사용하여 java.util.Enumeration을 설정해야 함.
home > 모든 세션 정보 확인하기
<hr>
<%
String name = "";
String value = "";
Enumeration en = session.getAttributeNames();
int count = 0;
while(en.hasMoreElements()){
count++;
name = en.nextElement().toString();
value = session.getAttribute(name).toString();
out.println(count + ".세션의 속성 이름 : ["+ name +"]<br>");
out.println(count + ".세션의 속성값 : ["+ value +"]<br>");
}
%>
세션 유효시간 설정 방법
- 세션의 유효시간 기본값은 1800초로 설정되어 있으며 변경이 가능함.
session.setMaxInactiveInterval(300); //300초로 유효시간 설정
- 세션의 유효시간을 0 또는 음수의 값으로 설정하게 될 경우 유효시간이 없는 상태가 된다.
- 이 경우 세션을 삭제 후에도 웹 서버에는 계속해서 남아있게 되어 메모리 부족 현상이 발생될 수 있으므로 주의가 필요함.
로그인 후 세션 유지 시간
- session 내장 객체의 다음 메서드를 변수에 대입하여 선언
단일 세션 삭제
- 단일 세션 memberID를 삭제할 때 사용하는 session 내장 객체의 메서드로 다음과 같이 선언
session.removeAttribute("memberId")
다중 세션 삭제
session.invalidte()
'Back > JSP' 카테고리의 다른 글
6장 액션 태그 (0) | 2023.04.10 |
---|---|
5장 쿠키 (0) | 2023.04.10 |
3장 유효성 검사 (0) | 2023.04.09 |
2장 폼 태그 활용 (0) | 2023.04.09 |
1장 웹 프로그래밍 (0) | 2023.04.09 |