[21.09.14] Session

yed·2021년 9월 14일
0

쿠키가 import되지 않는 이유는 내장형(시스템 라이브러리)으로 가지고있기 때문

도메인(어플리케이션)과 관련있는 쿠키의 값들을 배열로 가져오기
Cookie[] cookies=request.getCookies();

쿠키 사용 예제

최초 로그인 이후 로그인한 아이디 기억하기.

1) form.jsp

<form action="result.jsp" method="post">
  아이디<br>
  <input type="text" name="id" placeholder="아이디 입력"><br>
  비밀번호<br>
  <input type="password" name="pw" placeholder="비밀번호 입력"><br>
  <input type="checkbox" name="isSaveAgreed" value="agreed">아이디 저장<br>
  <input type="submit" value="로그인">
</form>

쿠키는 입력창에서 저장하는게 아니라 로그인 성공 시 쿠키가 생성되야합니다.

2) result.jsp

<%
  String agreed=request.getParameter("isSaveAgreed");
  
  if(agreed != null){
    Cookie id=new Cookie("id", request.getParameter("id"));
    id.setMaxAge(60);
    response.addCookie(id);
  }
%>

로그인 성공 시 결과페이지에서 쿠키를 생성하고

브라우저에 저장된 쿠키가 있을 때 다시 form.jsp를 연다면 만들어진 쿠키를 가져와서 입력된다

3) form.jsp

<%
  Cookie[] cookies=request.getCookies();
  String id="";
  
  if(cookies!=null){
    for(Cookie cookie : cookies){ 
    //여러개의 쿠키 중 name=id만 가져오기
      if(cookie.getName().equals("id")){ 
        id=cookie.getValue();
      }
    }
  }
%>

<input type="text" name="id" placeholder="아이디 입력" value="<%=id %>">

input에 value값으로 쿠키에서 가져온 id값을 넣어주면 아이디 기억하기가 구현됨


Session

  • 쿠키를 기반으로 사용한다
  • 서버측에서 데이터를 관리한다
  • 세션 ID를 부여하여 브라우저를 종료할때까지 데이터를 유지한다
  • 세션 객체 : session 범위에 존재하는 객체. 사용자를 식별할 수 있는 방법을 제공한다.
    1) 특정 페이지의 요청
    2) 웹사이트 방문 카운트
    3) 사용자에 대한 정보 저장
  • session 객체는 session의 메소드를 사용하면 생성된다. 예)session.setAttribute(name, value)

    주의사항
    쿠키는 해당 페이지에서만 사용되는데 세션은 현재 프로젝트(클라이언트)에 실행되는 모든 웹페이지에서 적용된다. 그래서 하나의 클라이언트에서 세션을 많이 사용하게되면 충돌이 발생할 수 있음

클라이언트의 개인정보와 관련된 데이터를 서버에 저장해 클라이언트와 상태를 유지함. 브라우저에선 세션을 확인할 수 없음.

세션을 안쓰면 로그인이 필요한 영역 A에서 B로 이동할 때 id/pw 정보도 B영역으로 전달하고 DB로 계속 확인해야함.

세션을 사용하면 id/pw가 승인이 되었기때문에 세션이 생성되고 생성된 세션만있으면 로그인이 필요한 영역 A든 B든 다 갈 수 있게된다.

세션은 클라이언트를 종료시키면 사라진다. 로그인하고 브라우저를 닫고 다시 브라우저로 접속하면 로그인이 풀려있는 것이 세션의 경우!

각 웹 브라우저의 요청으로 서버로부터 승인받은 세션은 특정한 식별자(세션 ID)를 부여받고 식별자를 사용해 세션을 구분하고 유지한다.

<%  
  //세션 생성시간 가져오기
  Date createTime=new Date(session.getCreationTime());

  //이 웹페이지의 마지막 접속시간 가져오기
  Date lastAccessTime=new Date(session.getLastAccessedTime());
  
  String title="재방문을 환영합니다!";
  int visitCount=0;
  String visitCountKey="visitCount";
  String useridKey="testId";
  String userid="test";
  
  //세션이 새로 생성되었는지 확인하기
  if(session.isNew()){ 
    System.out.println("세션이 새로 생성됨");
    visitCount=0;
    title="환영합니다. 처음 방문하셨습니다!";
  
    //세션에 키-값 저장하기
    session.setAttribute(useridKey, userid);
    session.setAttribute(visitCountKey, visitCount);
  
    //세션 유지 시간 설정
    session.setMaxInactiveInterval(10); //초단위
  }
  
  //세션값 가져오기
  visitCount = (Integer) session.getAttribute(visitCountKey);
  visitCount++;
  userid = (String) session.getAttribute(useridKey);
  session.setAttribute(visitCountKey, visitCount); //세션값 덮어씌우기
%>
  • session.getCreationTime() : 세션 생성시간 반환
  • session.getLastAccessedTime() : 웹페이지의 마지막 접속시간 반환
  • session.isNew() : 생성된 세션이 없으면 true를 반환
  • session.setAttribute(name, value) : 세션에 key-value 저장하기
  • session.setMaxInactiveInterval() : 초단위로 세션 유지 시간 설정

web.xml을 사용한 세션 유지시간 설정 방법

<session-config>
<session-timeout>10</session-timeout> 
// 분단위
</session-config>
  • session.getAttribute() : 세션값 가져오기
  • session.getAttributeNames() : 세션 이름 출력
  • session.removeAttribute() : key의 데이터만 제거. 세션을 막 사용하면 위험해서 필요한 값만 제거하는게 더 안전하다
  • session.invalidate() : 세션 무효화. 모든 세션 속성 제거

유효하지 않은 세션
세션 속성이 아무것도 없거나 세션이 invalidate된 경우


세션의 경우 테스트할 때 모든 브라우저를 다 닫고 시작하는게 좋다! 세션이 유지되고 있어서 오류가 발생할 수 있음

학습을 위해 jsp<->jsp로 하고있지만 실제로는 jsp와 servlet으로 클라이언트/서버를 구분지어서 사용할 예정

profile
6개월 국비과정 기록하기

0개의 댓글