티스토리 뷰
Cookie & session?
쿠키와 세션은 웹 브라우저, 서버에서 임시로 어떤 값들을 저장하고, 활용할 수 있도록 만들어진 임시 저장소라고 생각하면 된다. Web Application에서 적지 않게 사용하는 아주 중요한 개념이다.
cookie
쿠키는 key와 value 쌍으로 값을 웹 브라우저에 임시 저장하는 데 사용한다. 쿠키의 defualt 수명은 해당 웹 브라우저가 종료될 때 까지이며, 따로 수명을 설정하여 원하는 시간에 종료되게 끔 설정하는 것도 가능하다.
또한 웹 브라우저의 탭 간 공유되는 성질을 가지고 있다.
-Cookie 생성
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
<meta charset="UTF-8">
<title>웹 브라우저에 쿠키 전송</title>
</head>
<body>
<%
// 1. 쿠키 객체 생성
Cookie c = new Cookie("id", "1234");
// 2. 쿠키 수명 설정(int 초단위)
c.setMaxAge(60);
// 3. 웹 브라우저에 쿠키 전송
response.addCookie(c);
response.addCookie(new Cookie("pwd", "1234"));
response.addCookie(new Cookie("age", "27"));
%>
</body>
</html>
항상 어떤 값을 저장할 때는 response, 꺼낼 때는 request를 사용한다는 것을 잊지말자!
위와 같이 페이지의 소스 보기로 생성된 쿠키를 확인할 수 있다.
또한 한번 생성된 쿠키는 수정할 수 없기 때문에, 동일한 key값으로 덮어 씌워야 한다.
-cookie 추출
JSP는 우리가 쿠키를 하나만 꺼내 먹는 걸 원하지 않는 할머니와 같다. 쿠키는 반드시 전체 쿠키를 배열로 꺼낸 다음에 사용해야한다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
<meta charset="UTF-8">
<title>웹 브라우저에 저장된 쿠키 꺼내기</title>
</head>
<body>
<%
// 쿠기는 하나"만" 꺼낼 수 없다.
Cookie[] cookieArray = request.getCookies();
for(Cookie c : cookieArray){
out.print(c.getName() + " : " + c.getValue() + "<br />");
}
%>
</body>
</html>
Session
세션은 데이터를 웹 서버 쪽에 임시로 저장한다.
-세션 생성
세션은 쿠키와는 다르게 객체가 이미 JSP내에서 설정되어 있기 때문에 따로 선언할 필요가 없이 Attribute만 설정해주면 된다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
<meta charset="UTF-8">
<title>웹서버의 애플리케이션 영역의 임시저장소</title>
</head>
<body>
JSP는 세션 객체가 미리 설정되어 있다.(내장 객체) <br />
<%
session.setAttribute("key", "value"); // => Object 형태로 저장되기 때문에 꺼낼 때 형변환이 필요
session.setAttribute("number", 1234);
%>
</body>
</html>
-세션 추출
setAttribute에 저장되는 value는 Object 형식으로 저장되기 때문에 꺼낼 때 반드시 형변환이 필요하다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
<meta charset="UTF-8">
<title>session 저장소의 값 추출</title>
</head>
<body>
<h2>세션 값 추출</h2>
<%
String key = (String)session.getAttribute("key");
int number = (int)session.getAttribute("number");
%>
키: <%= key %>
number: <%= number %>;
</body>
</html>
- 세션 Attribute 삭제
세션은 쿠키와 다르게 값을 지울 수 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
<meta charset="UTF-8">
<title>session 저장소의 값 추출</title>
</head>
<body>
<h2>세션 값 추출</h2>
<%
String key = (String)session.getAttribute("key");
int number = (int)session.getAttribute("number");
session.removeAttribute("id");
%>
키: <%= key %>
number: <%= number %>;
</body>
</html>
- 세션 Attributes 를 한번에 추출
열거형을 사용하여 세션이 가지고 있는 모든 값들을 한번에 꺼낼 수도 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.util.Enumeration" %>
<!DOCTYPE>
<html>
<head>
<meta charset="UTF-8">
<title>세션에 있는 모든 값들 추출</title>
</head>
<body>
<%
// 세션에 있는 값을 모두 꺼내려면 열거 타입으로 꺼내야 한다.
Enumeration<String> names = session.getAttributeNames();
while(names.hasMoreElements()){
String name = names.nextElement().toString();
}
%>
</body>
</html>
- 세션 정보: 아래와 같이 코드를 작성하여 다양한 세션 정보를 알 수 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
<meta charset="UTF-8">
<title>세션 정보 얻기</title>
</head>
<body>
<h3> 세션 정보를 얻어내어 출력 </h3>
<%
String id_str = session.getId(); //세션 아이디
long lastTime = session.getLastAccessedTime(); //최종 접속 시간
long createTime = session.getCreationTime(); //생성 시간
long time_used = (lastTime - createTime) / 60000;
int inactive = session.getMaxInactiveInterval() / 60;
boolean n = session.isNew();
%>
1. 세션 아이디: <%= id_str %> <br />
2. 현재 페이지에 머문 시간: <%=time_used %><br />
3. 세션 유효 시간: <%= inactive %><br />
4. 새로운 세션 여부:
<%
if(n) out.print("새로운 세션");
else out.print("새로운 세션 없음");
%>
</body>
</html>
끝!
'WEB > DynamicWeb' 카테고리의 다른 글
[JSP] JAVA Beans (0) | 2021.04.23 |
---|---|
[JSP] 세션 활용 예제 <로그인> (0) | 2021.04.23 |
[JSP] Action Tags (0) | 2021.04.22 |
[JSP] JSP -> JSP 로 데이터를 전달하는 다양한 방법 (0) | 2021.04.21 |
[JSP] Application의 상세 정보 (0) | 2021.04.21 |
- react
- 파니노구스토
- 이탈리안 레스토랑
- 인천 구월동 이탈리안 맛집
- javascript
- Promise
- react-native
- AsyncStorage
- redux-thunk
- 인천 구월동 맛집
- Async
- redux
- await
- 맛집
- 정보보안기사 #실기 #정리
- Total
- Today
- Yesterday