Cookie & Session

juju·2022년 5월 9일
post-thumbnail

세션 (Session)

: 비연결성 (connectionless)
클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어버리는 특징
: 무상태 (stateless)
통신이 끝나면 상태를 유지하지 않는 특징

: 클라이언트(브라우저)에 저장되는 키와 값이 들어있는 작은 데이터파일

session 브라우저를 꺼버리면 사라지는 정보들
그 외에 날짜가 입력돼있는 것은 그 날짜까지 유지가 됨

Cookie 동작방식

Cookie 사용 예

  1. ID저장, 로그인 상태 유지
  2. 일주일간 다시 보지 않기
  3. 쇼핑몰 장바구니 기능

Cookie 단점

  1. 보안에 취약
  2. 작은 허용 용량
    (약 쿠키 당 4byte, 도메인 당 30개, 웹브라우저 당 300개)
    -> 허용 용량 범위가 넘어서면 오래된 순으로 사라짐
  3. 다른 브라우저에서 저장한 값 사용 불가
Client            요청 ->              Server
Client               <- 응답                   Server

1. 클라이언트가 페이지 요청
2. 상태를 유지하고 싶은 갚을 쿠키로 생성
3. http 헤더에 쿠키를 포함시켜 응답
4. 브라우저가 종료되어도 쿠키만료기간이 있다면 클라이언트에서 보관
5. 같은 요청을 할 경우 http해더에 쿠키를 함게 보냄
6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 http헤더에 포함시켜 응답

쿠키 만들기

  1. 쿠키 객체 생성
    Cookie cookie = new Cookie("id","쿠키몬스터");

  2. 쿠키의 만료기한 설정
    초단위로 설정 해야함 -> 아래는 1년의 만료기한 설정
    cookie.setMaxAge(606024*365);

  3. 쿠키를 웹브라우저로 전송
    response.addCookie(cookie);

만든 쿠키 가져오기

  1. 쿠키 가져오기 -> 전부 가져오는 작업을 해야한다.
    Cookie[] cookies = request.getCookies();

  2. name, value값 확인하기
    for(Cookie c : cookies) {
    out.print(c.getName() + " : " + c.getValue() +
    )%>

}

세션 (session)

브라우저가 종료되기 전까지 클라이언트의 정보를 유지하게 해주는 기술
사용자 정보 파일을 서버 에서 관리
http세션

Session 동작방식

session 사용 예

: 로그인 같이 보안상 중요한 작업을 수행할 때 사용

session 특징

  1. 각 client 에게 고유 ID 부여
  2. 보안 면에서 쿠키보다 우수
  3. 사용자가 많아지면 서버 메모리 많이 차지하게 됨

session 만들기

  1. session 생성
session.setAttribute("id", "wonjuzzzang");
session.setAttribute("age", 20);

괄호 내에 차례로 String, Object 형태로 값을 넣어줘야 함

① 내장객체이기 때문에 별도로 생성해 줄 필요가 없음

② 서버상에 데이터가 저장되기 때문에 응답하면서 다시 되돌려 줄 필요가 없음

  1. 세션 가져오기

 2-1 각각의 session 가져오기

object 형태로 받아오기 때문에 원하는 형태로 downcasting 필요함

String id = (String)session.getAttribute("id");
int age = (int)session.getAttribute("age");

 2-2 모든 session 가져오기

 ① 모든 session의 이름을 가져오기

Enumeration names = session.getAttributeNames();

Enumeratino 열거형
: 가지고 올 때 사용하기 편한 메소드들이 기본적응로 설계 돼 있음
: 객체들을 하나씩 처리하기에 용이

② 키값에 맞는 데이터 꺼내오기

반복해서 데이터 유무 확인

while (names.hasMoreElements()) {

데이터 꺼내오기
object 형태로 돌려주기 때문에 downcasting 필요

String name = (String)names.nextElement();

session 안에 있는 정보 가져오기

 String data = (String)session.getAttribute(name);
 out.print(data);
 out.print("<br>");

session 실습하기

우선

  1. loginform.jsp
  2. logincheck.jsp
  3. main.jsp
  4. logout.jsp

총 4개의 jsp 파일을 만들어 준다.

jsp파일 이동은 위의 그림 순서대로

  1. loginform.jsp에서 id, pw 데이터를 사용자에게 입력 받는다.
<body>

  <form action = "ex04logincheck.jsp">

    <p>아이디 : <input type = "text" name = "id"></p>
    <p>비밀번호 : <input type = "password" name = "pw"></p>
    <input type = "submit" value = "로그인">

  </form>

</body>

↓

  1. logincheck.jsp에서 id,pw가 test/12345와 일치하는지 판별한다.
<body>

	<%
        String id = request.getParameter("id");
        String pw = request.getParameter("pw");

        if (id.equals("test")&&pw.equals("12345")) {

            session.setAttribute("name", "쿠키몬스터");
            response.sendRedirect("ex04main.jsp");

        } else {

            response.sendRedirect("ex04loginform.jsp");

        }
     %>

</body>

2-1. 일치한다면 main.jsp로 이동한다.

<body>

	<%
	
	String name = (String)session.getAttribute("name");
	
	%>

	<p><%=name%>님 환영합니다.</p>
	<a href="ex04logout.jsp">로그아웃</a>


</body>

2-2. 일치하지 않는다면 다시 loginform.jsp로 되돌려 보낸다.

↓

  1. main.jsp에서 로그아웃을 누르면 logout.jsp로 이동하여 세션을 삭제시켜 주고, loginform.jsp으로 다시 되돌아온다.

    위에서 session 만들기와 받아오기는 설명을 했지만, session 지우는 것은 따로 설명을 안했기 때문에 간략하게 설명하자면

    session을 지우는 방법은 두가지이다.

    3-1. 내가 지우고싶은 session만 선택해서 삭제하는 방법
    session.removeAttribute("session이름");

    3-2. session을 모두 삭제하는 방법
    session.invalidate();

  <body>
	
	<%
      session.invalidate();
      response.sendRedirect("ex04loginform.jsp");
	%>

</body>

jsp 내장객체 기본영역 (Scope)

                                           
profile
티스토리로 이사갔습니다..~ : https://jujuzzangzzang.tistory.com/

0개의 댓글