일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- prettier-plugin-tailwindcss
- linux 배포판
- Render Queue
- Compound Component
- Custom Hook
- Microtask Queue
- 프로세스
- Sparkplug
- CS
- TypeScript
- 명시적 타입 변환
- 주니어개발자
- useCallback
- 타입 단언
- AJIT
- 좋은 PR
- useLayoutEffect
- JavaScript
- useMemo
- type assertion
- Dockerfile
- useEffect
- Headless 컴포넌트
- task queue
- react
- prettier
- docker
- 암묵적 타입 변환
- React.memo
- Event Loop
- Today
- Total
구리
TIL_210423_쿠키, 세션 본문
Cookie(쿠키), Session(세션)
클라이언트 단위로 상태정보를 유지하게 하려먼 쿠키와 세션을 사용
아래와 같은 기준에 따라 선택하여 사용
- 상태정보의 유지 기간이 브라우저가 종료될 때까지인지의 여부
- 유지하려는 정보의 저장 위치(서버, 클라이언트)
- 유지하려는 정보가 공개되어도 되는지의 여부
구분 | 쿠키 | 세션 |
저장 위치 | 클라이언트 | 서버 |
저장 데이터 타입 | 텍스트 | 객체 |
저장 데이터 크기 | 제한 있음 | 서버에서 수용할 수 있는 만큼 |
쿠키 속성
서버가 클라이언트에 저장하는 정보로 클라이언트 쪽에 필요한 정보를 저장해놓고 필요할 때 추출하는 것을 지원하는 기술로, 클라이언트와의 연결이 끊어져도 클라이언트마다 개별적으로 상태 정보를 유지하고자 할 때 활용
쿠키는 name, value로 구성된 정보로 브라우저에 저장되는 용량에 한계가 있고, 클라이언트가 직접 쿠키 정보를 점검할 수 있어서 보안상의 문제가 있다
쿠키 생성
1) 쿠키 객체 생성
Cookie c = new Cookie("name", "value");
2) 쿠키 유효 시간 설정
setMaxAge() 메소드의 매개변수는 second(초)이며 유효 시간이 지나면 쿠키는 소멸된다
c.setMaxAge(5);
3) 쿠키 전송
클라이언트쪽으로 쿠키 전송됨
response.addCookie(c);
response.addCookie(new Cookie("pwd", "1111"));
예시
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>웹 브라우저에 쿠키 전송</title>
</head>
<body>
<%
// 1. 쿠키 객체 생성
Cookie c = new Cookie("id", "1234");
// 2. 쿠키 수명 설정
c.setMaxAge(500);
// 3. 쿠키 내보내기 (웹 브라우저에 전송)
response.addCookie(c);
response.addCookie(new Cookie("pwd", "1111"));
response.addCookie(new Cookie("age", "20"));
%>
</body>
</html>
쿠키 추출
1) 쿠키 추출
Cookie[] cookies = request.getCookies();
2) 쿠키 검색
(Cookie)c.getName();
3) 쿠키 값 추출
먼저 원하는 쿠키를 이름으로 검색하여 찾은 후 쿠키 값을 추출하여 사용해야 함
(Cookie)c.getValue();
예시
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>웹 브라우저에 저장된 쿠키 꺼내기</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();
for(Cookie c : cookies){
out.print(c.getName() + " : " + c.getValue() + "<br />");
}
%>
</body>
</html>
session(세션)
HTTP 기반으로 동작하는 클라이언트가 서버에 정보를 요청할 때 생성되는 "상태정보"를 세션이라 하며
쇼핑몰 사이트의 장바구니 기능, 로그인 또는 로그아웃처럼 사용자 인증 처리를 하는 경우에 세션을 사용
(세션은 저장소가 다르기에 브라우저 상에서 세션값 확인 불가)
session 관련 메서드
메소드 | 기능 |
public Object getAttribute("String name") | getAttribute() 메소드의 인자값으로 지정된 데이터 값을 반환 |
public void setAttribute("String name","Object value") | session 객체에 name으로 지정된 이름으로 value 값을 등록 |
public void removeAttribute("String name") | session 객체에서 name으로 지정된 객체 삭제 |
public Enumeration getAttributeNames() | session 객체에 등록된 모든 정보의 이름만을 반환 |
public String getId() | session 객체에 지정된 세션 id 반환 |
public long getLastAccessedTime() | 클라이언트 요청이 마지막으로 시도된 시간을 밀리초 단위로 반환 |
public long getCreationTime() | session 객체가 생성된 시간을 밀리초 단위로 반환 |
public int getMaxInactiveInterval() | 클라이언트 요청이 없을 때 서버의 세션 수명 시간 (초단위) 지정 기본 유효 시간은 30분 |
public boolean isNew() | 서버 측에 새로운 세션을 생성한 경우 true 기존 세션 유지라면 false 반환 |
public void invalidate() | 현재의 세션을 삭제한다 |
setAttribute() 예시
03_setSession.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>웹서버의 어플리케이션 영역</title>
</head>
<body>
JSP는 세션 객체 미리 설정되어 있음 (내장객체) <br />
쿠키처럼 객체 생성할 필요 없음 <br />
<%
session.setAttribute("id", "test"); // => Object -> 형변환 필요(String)
session.setAttribute("age", 10); // => Object -> 형변환 필요(Integer)
%>
</body>
</html>
getAttribute(), removeAttribute() 예시
04_getSession.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session 저장소의 값 추출</title>
</head>
<body>
<h2>세션 값 추출</h2>
<%
String id = (String)session.getAttribute("id");
int age = (int)session.getAttribute("age");
session.removeAttribute("id");
%>
아이디 : <%= id %>
<br />
나이 : <%= age %>
</body>
</html>
03_setSession 실행 후 04_getSession 실행 결과
Q) 04_getSession.jsp에서 id 값을 삭제하였는데 결과 화면에 출력되는 이유는 ?
코드를 보면 session의 id값을 먼저 호출한 후 삭제하였기에 화면엔 나오지만 04_getSession.jsp를 다시 실행한다면 id 값도 출력되지 않을 것이다
getAttributeNames() 예시
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Enumeration" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session에 있는 모든 값들 추출</title>
</head>
<body>
<%
Enumeration<String> names = session.getAttributeNames();
while(names.hasMoreElements()){
String name = names.nextElement().toString(); // 세션이름 추출
String value = session.getAttribute(name).toString(); // id는 삭제하였기에 age만 추출
out.print(name + " : " + value);
}
%>
</body>
</html>
04_getSession.jsp에서 id의 값을 삭제했기에 age와 그에 대한 값만 반환되는 것을 볼 수 있다
그외 메서드 적용 예시
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<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>
'JSP,Serlvet' 카테고리의 다른 글
TIL_210428_DAO,DTO,JSP, Servlet 활용 데이터 가공 문제 (0) | 2021.04.28 |
---|---|
210427_JSP 관련 데이터 다루기 문제 (0) | 2021.04.27 |
TIL_210426_JSTL ,Servlet 기초 (0) | 2021.04.26 |
TIL_210422_JSP 표준 액션 태그 (0) | 2021.04.25 |
TIL_210421_JSP 기초2 (label, forward, application, JSP파일 데이터 옮기는 방법, 한글 변수 안 깨지게 전달하는 방법) (0) | 2021.04.21 |