14. 세션
0. 목차
Chapter14. 세션
Ch14 - 1. 세션이란?
Ch14 - 2. 세션 문법
Ch14 - 1. 세션이란?
▶ 쿠키 vs 세션
▷ 공통점 : 세션도 쿠키처럼 웹 브라우저와의 관계를 유지하는 수단
▷ 차이점 : 쿠키가 클라이언트 측에 저장되는 반면, 세션은 서버 상에 객체로 존재
▶ 세션의 장점
▷ 세션은 서버에서만 접근이 가능하여 보안이 좋음
- .jsp가 아니면 접근 불가
▷ 저장할 수 있는 데이터에 한계가 없음
Ch14 - 2. 세션 문법
▶ 세션 사용 과정
▷ 세션은 클라이언트의 요청이 발생하면 자동 생성
▷ session
이라는 내부 객체를 지원하여 세션의 속성 설정 가능
session.setAttribute("session 이름", "session 값");
▶ 세션 관련 메서드
▷ setAttribute()
- 세션에 데이터를 저장
▷ getAttribute()
- 세션에서 데이터를 얻음
▷ getAttributeNames()
- 세션에 저장되어 있는 모든 데이터의 이름(유니크한 키값)을 얻음
▷ getId()
- 자동 생성된 세션의 유니크한 아이디를 얻음
▷ isNew()
- 세션이 최초 생성되었는지, 이전에 생성된 세션인지를 구분
▷ getMaxInactiveInterval()
- 세션의 유효 시간을 얻음
- 가장 최근 요청시점을 기준으로 카운트
// C:\BaeksEE\apache-tomcat-8.5.70\conf\web.xml <session-config> <session-timeout>30</session-timeout> // 유효 시간 30분 디폴트 값, 변경 가능 </session-config>
▷ removeAttribute()
- 세션에서 특정 데이터 제거
▷ Invalidate()
- 세션의 모든 데이터를 삭제
▶ 세션 메서드 실습1 : 세션 사용 과정
▷ 세션 생성 : sessionInit.jsp
// sessionInit.jsp
<body>
<%
session.setAttribute("mySessionName", "mySessionData"); // mySessionName 세션 생성
session.setAttribute("myNum", 12345); // myNum 세션 생성
%>
<a href="sessionGet.jsp">session get</a> // 세션 사용하는 곳으로 이동
</body>
▷ 세션 사용 : sessionGet.jsp
// sessionGet.jsp
<body>
<%
Object obj1 = session.getAttribute("mySessionName"); // string이든 int든 get해서 사용할 땐 Object 타입으로 받음
String mySessionName = (String)obj1;
out.println(mySessionName +"<br />");
Object obj2 = session.getAttribute("myNum");
Integer myNum = (Integer)obj2;
out.println(myNum +"<br />");
out.println("************************ <br />");
String sName;
String sValue;
Enumeration enumeration = session.getAttributeNames(); // 있는 세션 다 꺼냄
while(enumeration.hasMoreElements()){
sName = enumeration.nextElement().toString();
sValue = session.getAttribute(sName).toString();
out.println("sName : " + sName + "<br />");
out.println("sValue : " + sValue + "<br />");
}
out.println("************************ <br />");
String sessionID = session.getId(); // 특정 id를 꺼냄, id는 서버에서 만들어 주는 것
out.println("sessionID : " + sessionID + "<br />");
int sessionInter = session.getMaxInactiveInterval(); // 세션 유효 시간
out.println("sessionInter : " + sessionInter + "<br />");
out.println("************************ <br />");
session.removeAttribute("mySessionName"); // 특정 세션 삭제
Enumeration enumeration1 = session.getAttributeNames();
while(enumeration1.hasMoreElements()){
sName = enumeration1.nextElement().toString();
sValue = session.getAttribute(sName).toString();
out.println("sName : " + sName + "<br />");
out.println("sValue : " + sValue + "<br />");
}
out.println("************************ <br />");
session.invalidate(); // 모든 세션 삭제
if(request.isRequestedSessionIdValid()) {
out.println("session valid");
} else {
out.println("session invalid");
}
%>
</body>
▷ 세션 확인 : sessionTest.jsp
// sessionTest.jsp
<body>
<%
Enumeration enumeration = session.getAttributeNames(); // 있는 세션 다 꺼냄
int i = 0;
while(enumeration.hasMoreElements()) {
i++;
String sName = enumeration.nextElement().toString();
String sValue = (String)session.getAttribute(sName);
out.println("sName : " + sName + "<br />");
out.println("sValue : " + sValue + "<br />");
}
if(i == 0) out.println("해당 세션이 삭제 되었습니다.");
%>
</body>
▶ 세션 메서드 실습2 : 로그인
▷ id/pw 입력 : login.html
// login.html
<body>
<form action="loginOk.jsp" method="post"> // 입력 후 loginOk.jsp에서 id.pw 확인
아이디 : <input type="text" name="id" size="10"><br />
비밀번호 : <input type="password" name="pw" size="10"><br />
<input type="submit" value="로그인">
</form>
</body>
▷ id/pw 확인 : loginOk.jsp
// loginOk.jsp
<body>
<%!
String id, pw;
%>
<%
id = request.getParameter("id");
pw = request.getParameter("pw");
if(id.equals("abcde") && pw.equals("12345")) {
session.setAttribute("id", id);
response.sendRedirect("welcome.jsp");
} else {
response.sendRedirect("login.html");
}
%>
</body>
▷ id/pw 일치 시 : welcome.jsp
// welcome.jsp
<body>
<%
Enumeration enumeration = session.getAttributeNames(); // 세션 이름 사용
while(enumeration.hasMoreElements()){
String sName = enumeration.nextElement().toString(); // 세션 이름 형변환, Object → String
String sValue = (String)session.getAttribute(sName); // 세션 값도 형변환, Object → String
if(sValue.equals("abcde")) out.println(sValue + "님 안녕하세요." + "<br />");
}
%>
<a href="logout.jsp">로그아웃</a>
</body>
▷ 로그아웃 했을 때 : logout.jsp
<body>
<%
Enumeration enumeration = session.getAttributeNames();
while(enumeration.hasMoreElements()) {
String sName = enumeration.nextElement().toString();
String sValue = (String)session.getAttribute(sName);
if(sValue.equals("abcde")) session.removeAttribute(sName); // 기존에 입력한 id/pw는 삭제
}
%>
<a href="sessiontest.jsp">sessionTest</a>
</body>