세션,쿠키

suyeon lee·2021년 3월 11일
0

JSP

목록 보기
21/24

HTTP 프로토콜의 특징

비연결지향(Connectionless)/상태정보유지안함(Stateless)

1.비연결지향(connectionless)

HTTP는 먼저 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는 단발성의 특징이 있다.

2.상태정보유지안함(stateless)

연결을 끊는 순간 클라이언트와 서버와의 통신이 끝나며 상태 정보는 유지하지 않는 특성

쿠키와 세션은 위의 두가지 특성을 보완하기 위해서 사용되기 시작했다.

세션

일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다.

여기서 일정 시간은 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 말한다.

세션 생성

setAttribute(String name, Object value)
실제 사용예
session.setAttribute("memverId","admin")

세션 데이터 불러오기

getAttribute(String name)
실제 사용예
String id = (String)session.getAttribute("memberId")
List일때
List< String> myStuff = (List< String>) session.getAttribute(“myToDoList”);

세션 삭제

removeAttribute(String name)
name은 세션에 저장된 세션속성의 이름
사용예
session.removeAttribute("memberId")

여러 세션을 한번에 삭제하기
session.invalidate()

세션 유효시간 설정

getMaxInactiveInterval() //초단위로 가져옴
session.getMaxInactiveInterval()

todo-demo.jsp파일

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ToDo 리스트</title>
</head>
<body>
	<!-- 1.html form 작성 할일을 입력받을 form생성 -->
	<form action="todo-demo.jsp">
	새 할일 : <input type ="text" name = "theItem"> 
	<input type="submit" value="입력">
	</form>
	<!-- 1.5.입력 아이템을 테스트 출력 -->
	<%=request.getParameter("theItem") %>
	
	<!-- 2.세션에  할일 목록을 추가해서 저장-->
	
	<%
	//세션에 저장된 todo리스트를 꺼낸다
	//세션에 목록이 하나라도 있다면 먼저 꺼낸후 새로운 목록을추가하고 같이 저장하기때문에  먼저 get해야함
	List<String> items = (List<String>)session.getAttribute("todoList");
	
	
	//만약 todo리스트가 없으면 새로 만든다
	if(items == null){
		items = new ArrayList<String>();
		session.setAttribute("todoList", items);
	}
	
	//입력 아이템 추가하다
	String theItem = request.getParameter("theItem");
	//버그발견 1.빈칸입력된다 2.할일 중복된다
	//.trim()좌우 공백 제거 (스페이스만 입력해도 추가 되지안게하기위해)
	//contains()대상 문자열에 특정 문자열이 포함되어 있는지 확인하는 함수이다.
	//! 부정
	
	if(theItem !=null){
	boolean isItemNotEmpty = theItem.trim().length()>0;
	boolean isItemNotDuplicate = !items.contains(theItem.trim());
	
	if(isItemNotEmpty && isItemNotDuplicate){
		items.add(theItem);//할일 리스트추가
		session.setAttribute("todoList", items);//추가된 items을 세션에 저장
		
		}
	}
	%>
	
	<!-- 3.화면에 출력하기 -->
	<hr>
	<b>할일 목록</b><br>
	
	<ol>
	<%
	
	for(String temp : items){
		out.print("<li>"+temp+"</li>");
	}
	
	%>
	</ol>
	
</body>
</html>

쿠키

쿠키는 클라이언트 로컬에 저장되는 키와 밸류가 들어있는 저용량 데이터 파일이다.
쿠키에는 이름,값,만료날짜(쿠키 저장기간), 경로정보가 포함되있다.
쿠키는 일정시간동안만 데이터를 저장할 수있다. 그래서 로그인 상태유지 같은곳에서 쓰인다.
(은행같은곳은 그 텀이 더짧다 보안이 중요하므로)
쿠키는 클라이언트의 상태 정보를 로컬에 저장하였다가 참조한다.

쿠키생성

Cooke Cookie(String name, String value)
사용 예
Cookie cookie = new Cookie("memberId,"damin");
response.addCookie(cookie) //웹브라우저로 추가한쿠키를 전송함

쿠키불러오기

쿠키객체가 여러개 일때 쿠키배열 형태로 가져옴
Cookie[] request.getCookies()
사용 예
Cookie[] cookies = request.getCookies();

쿠키 객체 정보가져오기
String.getName(),String.getValue() 사용
사용 예
Cookie[] cookies = request.getCookies();
for(int i=0;i<cookies.length;i++){
out.println(cookies[i].getName + ":"+ cokkies[i].getValue()+"< br >");
}

쿠키 삭제

쿠키삭제기능은 별도로 제고하지않고 유지시간을 만료시킴으로 쿠키를 삭제함

void setMaxAge(int age)
사용 예
Cookie cookie = new Cookie("memberId","admin");
cookie.setMaxAge(0);
response.addCookie(cookie);

세션과 쿠키 차이점

1.저장위치
쿠키 : 클라이언트에 파일로 저장
세션 : 서버에 저장

2.보안
쿠키 : 클라이언트 로컬에 저장되기 떄문에 변질되거나 request에서 스나이핑당할 우려가 있어서 보안 취약
세션 : 쿠키를 이용해서 세션id만 저장하고 그것으로 구분해서 서버에서 처리하기 떄문에 비교적 안전 (보안 면에서 쿠키보다 우수)

3.만료시점
쿠키 : 만료시간은 있지만 파일로 저장되기 떄문에 브라우저를 종료해도 계속해서 정보가 남아 있을수 있음. 만료기간을 넉넉히 잡아두면 쿠키삭제 할 때까지 유지될수도 있음.
세션 : 만료기간을 정할수는 있지만 브라우저가 종료되면 그 에 상관없이 삭제됌.

4.속도
쿠키 : 쿠키에 정보가 있기 떄문에 서버에 요청시 속도가 빠르다.
세션 : 정보가 서버에 있기 떄문에 처리가 요구되어 비교적으로 느림

0개의 댓글