Cookie & Session

imyour_juu·2022년 5월 9일
0
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)

                                           

0개의 댓글