쿠키가 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값을 넣어주면 아이디 기억하기가 구현됨
주의사항
쿠키는 해당 페이지에서만 사용되는데 세션은 현재 프로젝트(클라이언트)에 실행되는 모든 웹페이지에서 적용된다. 그래서 하나의 클라이언트에서 세션을 많이 사용하게되면 충돌이 발생할 수 있음
클라이언트의 개인정보와 관련된 데이터를 서버에 저장해 클라이언트와 상태를 유지함. 브라우저에선 세션을 확인할 수 없음.
세션을 안쓰면 로그인이 필요한 영역 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); //세션값 덮어씌우기
%>
web.xml을 사용한 세션 유지시간 설정 방법
<session-config> <session-timeout>10</session-timeout> // 분단위 </session-config>
유효하지 않은 세션
세션 속성이 아무것도 없거나 세션이 invalidate된 경우
세션의 경우 테스트할 때 모든 브라우저를 다 닫고 시작하는게 좋다! 세션이 유지되고 있어서 오류가 발생할 수 있음
학습을 위해 jsp<->jsp로 하고있지만 실제로는 jsp와 servlet으로 클라이언트/서버를 구분지어서 사용할 예정