http는 비연결형 프로토콜이다
브라우저가 웹서버에게 요청을 주는데
서버는 거기에 응답을한다.html문서로
client가 server로 요청하면 해당page를 client에게 전송한후 응답종료
->연결하고 끊어버림 이게 한계임
client의 정보를 지속적으로 유지하기 위한 방법
쿠키는 클라이언트pc 웹브라우저가 관련되어있다
세션의 관련된 정보는 웹서버 server pc에 관련되어있다
쿠키 생성 및 동작과정
1. client의 요청
2. 쿠키를 http response header에 담아서 응답
3. 쿠키를 client의 하드디스크에 저장
4. client가 다시 요청할때 쿠키를 포함해서 요청
5. 응답(쿠키 업데이트시 다시 쿠키 전달)
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//1. Cookie객체 생성
// 쿠키의 값은 영문, 숫자만 가능! -> 한글 데이터는 인코딩 진행
// 한글인코딩 : URLEncoder.encode("인코딩할 값,", "인코딩 방식")
Cookie cookie = new Cookie("name",URLEncoder.encode("최대열","UTF-8"));
Cookie cookie2 = new Cookie("age",URLEncoder.encode("20","UTF-8"));
//2. Cookie의 기한 설정
//쿠키의 매개변수에 단위는 1초임
cookie.setMaxAge(60*60);
//3. 쿠키 전송
//쿠키는 응답시에 보내므로, response객체 사용
//매개변수에 생성한 쿠키
response.addCookie(cookie);
response.addCookie(cookie2);
%>
</body>
</html>
쿠키조회
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//4. Cookie 조회
// 쿠키 조회 시 리턴타입은 배열 -> Cookie객체가 여러개라서
// 서버가 따로 요청하지 않아도, request객체에 cookie는 담겨서 온다
// request.getCookies() 메소드 사용해서 쿠키 조회
Cookie[] cookies = request.getCookies();
for(int i=0; i<cookies.length; i++){
out.print("쿠키이름 : "+cookies[i].getName()+"<br/>");
out.print("쿠키값 : "+cookies[i].getValue()+"<br/>");
}
%>
<hr>
<!-- - 표현식 사용해서 출력
- 인코딩이 된 상태이기 때문에 디코딩 해줘야함!
- 디코딩(코드->문자):URLDecoder.decode("디코딩할 값","디코딩방식")
- for-each문 사용해서 출력
for(배열의 데이터타입 변수 : 반복가능한 데이터 ex.배열, List..등){
반복할 실행문장
}
-->
<%for(Cookie c : cookies){ %>
쿠키이름 : <%= URLDecoder.decode(c.getName(),"UTF-8") %><br>
쿠키값 : <%= URLDecoder.decode(c.getValue(),"UTF-8") %><br>
<%} %>
</body>
</html>
웹브라우저가 웹서버에게 요청을 보냄
J SESSION ID:브라우저를 구별하기 위한 임시 키
package Session;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Ex03_makeSession
*/
@WebServlet("/Ex03_makeSession")
public class Ex03_makeSession extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.Session객체 생성
//요청이 들어올때 session 저장소가 만들어지기 때문에 request객체 사용
HttpSession session = request.getSession();
//2.Session생성
//session의 값은 Object 타입 -> 모든 객체를 다 담을 수 있음!
//같은 session이름에 다른 값을 담으면 덮어쓰기가 된다!
session.setAttribute("이름","최대열");
session.setAttribute("이름","최대열2");
//3.Session의 유효기간 설정
//단위 : 초
//일정 시간동안 요청이 없으면 session을 제거
session.setMaxInactiveInterval(60*60);
PrintWriter out = response.getWriter();
response.setContentType("text/html; charset=UTF-8");
out.print("<h1>Session Making</h1>");
}
}
showsession
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//4.Session 조회
/* String name = session.getAttribute("이름").toString(); */
String name = (String)session.getAttribute("이름");
%>
<h1><%=name %></h1>
</body>
</html>
deleteSession
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//5.Session삭제
//5-1. 특정 Session 삭제
session.removeAttribute("이름");
//5-2. 전체 Session 종료
session.invalidate();
%>
<h1>Session 삭제중</h1>
</body>
</html>
쿠키는 보안 어려움
저장형식 텍스트
세션은 보안 강력함
저장형식 오브젝트
쿠키는 아이디 자동완성,오늘하루열지않기,장바구니
세션은 중요한정보관리,네이버메일,네이버카페,네이버블로그