Session
세션(session) 내장객체
. 쿠키 : 사용자 정보파일이 클라이언트에 저장되는 데이터
. 세션 : 사용자 정보파일이 웹컨테이너(서버)에 저장되는 데이터
. 웹 어플리케이션이 실행되는 동안 사용자가 웹 어플리케이션의 데이터를
가져와 확인할 수 있는 권한을 부여하기 위해 사용한다.
. 생성
- 클라이언트가 서버에 접속할 때, 클라이언트별로 세션이 자동으로 생성된다.
- 고유한 ID발생(세션아이디) -- > 클라이언트 전송 -- > 세션ID 이용해서 접속
. 특징
- 각 클라이언트에게 고유한 ID부여
- 세션ID로 클라이언트를 구분해서 클라이언트의 요구에 맞는 서비스를 제공
- 보안면에서 쿠키에 비해 우수
- 사용자가 많아질수록 서버의 메모리를 많이 차지하게 된다.
- 세션 : 보안상 중요한 작업을 주로 수행
- 쿠키 : 장바구니, 자동로그인, 아이디와 비번을 저장해 놓으시겠습니까? 등에 활용
. 메소드
- getID() : 세션별로 고유하게 부여된 ID를 반환
- getMaxInterval(long) : 유효시간을 초단위로 지정 (web.xml에서는 분단위)
- invalidate() : 세션삭제
- setAttribute(), getAttribute() : 세션값 저장,읽기
session1
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="true"%> <!-- session=true():자동생성/false():수동생성 -->
<%@ page import="java.util.Date, java.text.SimpleDateFormat" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션 아이디,생성시간,최종접근시간</title>
</head>
<body>
<%
Date c_time = new Date();
Date m_time = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
c_time.setTime(session.getCreationTime()); //최초 세션생성 시간
m_time.setTime(session.getLastAccessedTime()); //마지막 접속시간
%>
<h3>
세션 아이디: <%=session.getId() %><br>
세션 생성시간: <%=formatter.format(c_time) %><br>
세션 최종접근시간: <%=formatter.format(m_time) %>
</h3>
</body>
</html>
session2
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="true"%>
<%
session.setAttribute("NAME","서대길");
session.setAttribute("ADDRESS","서울");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션 속성 설정</title>
</head>
<body>
<h3>세션 속성이 설정되었습니다.<br><br>
<a href="session2_view.jsp">여기를 클릭ㅇㅅㅇ</a>
</h3>
</body>
</html>
session2_view
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션속성 view</title>
</head>
<body>
<h3>
Name : <%= session.getAttribute("NAME") %><br>
Address : <%=session.getAttribute("ADDRESS") %>
</h3>
</body>
</html>
세션 삭제
. invalidate()
. 유효시간을 설정해서 자동으로 삭제
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
session.invalidate(); //삭제
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션 삭제</title>
</head>
<body>
<h3>
세션이 삭제되었습니다<br>
<a href="session2_view.jsp">여기를 클릭!ㅇㅅㅇ</a>
</h3>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
session.setMaxInactiveInterval(60*60*24); //60초*60초*24시간
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션 삭제</title>
</head>
<body>
<h3>
세션이 삭제되었습니다<br>
<a href="session2_view.jsp">여기를 클릭!ㅇㅅㅇ</a>
</h3>
</body>
</html>
로그인
session5_form
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 폼</title>
</head>
<body>
<form action="session5_Do.jsp" method="post">
아이디 : <input type="text" name="id"><br>
비밀번호 : <input type="password" name="pw"><br><br>
<input type="submit" value="로그인">
</form>
</body>
</html>
session5_Do
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>admin 로그인</title>
</head>
<body>
<%
String id = request.getParameter("id");
String pw = request.getParameter("pw");
if(id.equals("admin") && pw.equals("1234")){
session.setAttribute("LOGIN", "id");
out.print("<h2>로그인성공</h2>");
out.print("<a href='session5_logincheck.jsp'>메인페이지로 ㅎㅅㅎ</a>");
}else{
out.print("<h2>로그인 실패</h2>");
out.print("<a href='session5_logincheck.jsp'>메인페이지로 ㅎㅅㅎ</a>");
}
%>
</body>
</html>
session5_logincheck
<%@ 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>
<%
String id = (String)session.getAttribute("LOGIN");
boolean isLogin = false;
if(id != null) isLogin = true;
if(isLogin) out.print("<h2>"+id+"님이 로그인 상태입니당</h2>");
else out.print("<h2>로그아웃 상태입니당</h2>");
%>
</body>
</html>