티스토리 뷰
1. 세션이란?
- 로그인 정보 및 클라이언트의 정보를 저장하는 방법
- 쿠키와 마찬가지로 웹브라우저와 서버와의 관계를 유지하는 수단.
- 쿠키는 클라이언트의 정보를 클라이언트의 특정 위치에 저장하지만, 세션은 서버상에 객체로 존재
- 세션은 서버에서만 접근이 가능하여 보안이 좋고, 저장할 수 있는 데이터에 한계가 없음.
2. 세션 vs 쿠키
2-1 쿠키
- 서버와 클라이언트의 관계를 지속적으로 이어줌
- 보안에 취약함(WAS에서 생성 -> local에 저장). 다른 사람이 내 로컬 경로를 따라 쿠키데이터를 확인하면 정보가 노출될 수 있음.
- 용량이 적음(1.2m)
2-2 세션
- 서버에 객체로 존재하기 때문에, 보안에 강함.
- JSP를 통해서만 접근이 가능하기 떄문에. 용량의 제한이 없음.
- 브라우저의 요청 마다 세션객체가 생성되어(자동으로 JSP컨테이너에서 생성해줌) 유니크한 세션아이디를 생성함.
- 로그인이나 정보를 유지하려할때 많이 사용됨.
3. 세션문법
- 세션은 클라이언트의 요청이 발생하면 자동생성(JSP웹어플리케이션 컨테이너).
- JSP가 session이라는 내부 객체를 지원하여 세션의 속성 설정 가능
3-1 세션관련 메소드
- setAttribute() : 세션에 데이터를 저장 ex) id= abcd, pw = 1234
- getAttribute() : 세션에서 데이터를 얻음
- getAttributeNames() : 세션에 저장되어 있는 모든 데이터의 이름(유니크한 키값)을 얻음.
- getId() : 자동 생선된 세션의 유니크한 아이디를 얻음
- isNew() : 세션이 최초 생성되었는지, 이전에 생성된 세션인지를 구분 (판단하는 메서드, boolean)
- getMaxInactiveInterval() : 세션의 유효시간을 얻음. 가장 최근 요청시점을 기준으로 카운트 됨.
(C:\Users\Sungwon\Desktop\eclipse-java-2019-06-R-win32-x86_64\apache-tomcat-7.0.99\apache-tomcat-7.0.99\conf\web.xml <- 파일을 확인하면 session값이 defalut로 30분설정 돼 있는 것을 알 수 있음. 수정가능)
- removeAttribute() : 세션에서 특정 데이터를 제거
- invalidate() : 세션의 모든 데이터를 삭제
3-2 세션 예제
1) session Init
- setAttribute를 통해 세션에 속성의 이름과 값 저장
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%// 속성의 이름, 값
session.setAttribute("mySessionName", "mySessionData");
//session : 내부객체 JSP컨테이너에서 Servlet으로 만들때 자동으로 만들어 주기 떄문에 선언을 안해도 바로 사용 가능
session.setAttribute("myNum", 12345); //여러개 지정 가능
%>
<a href="sessionGet.jsp">session get</a> <!--session get으로 넘어감 -->
</body>
</html>
2) sessionGet.jsp
- sessionInit에서 저장한 값을 받고 출력함.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import= "java.util.Enumeration"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
Object obj1 = session.getAttribute("mySessionName"); //getAttribute로 받아온 값은 Object 타입임.
String mySessionName = (String) obj1; //원하는 데이터 값으로 캐스팅해서 사용 (String)
out.println(mySessionName + "<br/>");
Object obj2 = session.getAttribute("myNum"); //set때는(보낼 때) int지만 get할때는 Object로 받아옴
Integer myNum = (Integer)obj2;
out.println(myNum + "<br/>");
out.println("******************* <br/>");
String sName;
String sValue;
Enumeration enumeration = session.getAttributeNames(); // 모든 값을 받기 위해 직렬화 객체 Enumeration 사용
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값을 얻음
out.println("sessionID : " + sessionID + "<br/>");
int sessionInter = session.getMaxInactiveInterval(); //요청시간을 얻음
out.println("sessionInter : " + sessionInter + "<br/>");
out.println("******************* <br/>");
session.removeAttribute("mySessionName"); //해당 name("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>
</html>
- 첫번째 출력에서는 myNum과 mySessionName전부 출력
- remove후 myNum만 출력
- invailed 이후 전체 삭제되어 아무것도 출력 x
3-3 세션 활용 login예제
1) login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action= "loginOk.jsp" method="post">
아이디 : <input type="text" name="id" size="10"><br/>
비밀번호 : <input type="password" name="pw" size="10"><br/>
<input type="submit" value="로그인">
</form>
</body>
</html>
2) loginOk.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
String id, pw;
%>
<%
id = request.getParameter("id");
pw = request.getParameter("pw");
if(id.equals("abcde") && pw.equals("12345")){
session.setAttribute("id", id); //아이디와 패스워드가 일치하면 세션에 id값 저장
response.sendRedirect("welcome.jsp");
} else {
response.sendRedirect("login.html");
}
%>
</body>
</html>
3) welcome.jsp
<%@page import="java.util.Enumeration" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
Enumeration enumeration = session.getAttributeNames(); //모든 브라우저에 존재하면 세션 네임을 다 받아오고
while(enumeration.hasMoreElements()){ //반복을 돌림
String sName = enumeration.nextElement().toString();
String sValue = (String)session.getAttribute(sName);
if(sValue.equals("abcde")) out.println(sValue + "님 안녕하세요." + "<br/>"); //해당 세션이 존재하면 인삿말 출력
//if(sValue.equals("abcde")) session.removeAttribute(sName);
}
%>
<a href="logout.jsp">로그아웃</a>
</body>
</html>
4) logout.jsp
<%@page import="java.util.Enumeration" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<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삭제 = 로그아웃
}
%>
<a href="sessiontest.jsp">sessionTest</a>
</body>
</html>
5) sessiontest.jsp
<%@page import="java.util.Enumeration" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<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>
</html>
*enumeration?
*enumeration 오류 해결
-> <%@ page import= "java.util.Enumeration"%>를 빼먹음!
'JSP > 인프런 JSP' 카테고리의 다른 글
14. 자바 빈 (0) | 2020.02.19 |
---|---|
13. 예외 페이지 (0) | 2020.02.18 |
11. 쿠키 (0) | 2020.02.13 |
10. 액션태그 (0) | 2020.02.12 |
9. JSP 본격적으로 살펴보기 -3 (0) | 2020.02.07 |
- 20200403
- 20200413
- 20200428
- 20200429
- 20200330
- 20201204
- 20200424
- 20200804
- 백준
- 20200417
- 20200504
- 20200510
- 20200420
- 20200425
- chapter7
- chapter8
- 20200624
- 20200421
- 생활코딩리눅스
- 20200406
- likelion
- 20200415
- 20200427
- 20200512
- 20200319
- 20200423
- 20200622
- 20200502
- 20200503
- 20200317
- Total
- Today
- Yesterday