Cookie란?
쿠키를 부스러기가 남는 것처럼 프로그램에서 흔적을 남기는 것이다.(클라이언트에 저장)
이전에 있었던 클라이언트와 서버의 접속을 이어나가는 의미
우리가 사용하는 HTTP 프로토콜은 request, response 과정을 한번 거치면
클라이언트와 서버의 연결을 바로 해제해버린다. (자원 낭비, 서버 부하 방지)
이때 Cookie
라는 클래스를 사용하여, 기존 연결 정보를 저장했다가 다시 연결해준다.
- cookie 변수 = new Cookie(이름,값); -> 쿠키 생성
- Cookie[] 변수 = request.getCookies(); -> 쿠키 받아오기(여러 개라 배열로)
- response.addCookie(쿠키); -> 쿠키 저장
- 쿠키.setMaxAge(60*60) -> 쿠키의 유효기간을 60초*60초 = 1시간
예제
login.jsp
<body>
<form action="loginCon" method="post">
ID : <input type="text" name="mID"></br>
PW : <input type="password" name="mPW"></br>
<input type="submit" value="login">
</form>
</body>
간단하게 아이디와 패스워드를 입력받는 login.jsp를 만들었다.
입력하고 login을 누르면 LoginCon 서블릿으로 데이터를 보낸다.
LoginCon.java
@WebServlet("/loginCon")
public class LoginCon extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String mId = request.getParameter("mID"); //mId변수에 사용자가 입력한 아이디 받아옴
String mPw = request.getParameter("mPW"); //mPw변수에 사용자가 입력한 패스워드 받아옴
Cookie[] cookies = request.getCookies(); //클라이언트에 저장돼있는 쿠키 받아옴
Cookie cookie = null; //일단 쿠키는 null로 저장
for (Cookie c : cookies) { //for문으로 배열 안에 있는 쿠키들 검색
System.out.println("c.getName() : " + c.getName() + ", c.getValue() : " + c.getValue());
if(c.getName().equals("memberId")) { //memberId의 이름을 갖는 쿠키의 정보를 담음
cookie = c;
}
}
if(cookie == null) { //만약 쿠키가 없다면
System.out.println("cookie is null");
cookie = new Cookie("memberId", mId); //쿠키 생성
}
response.addCookie(cookie); //쿠키 저장
cookie.setMaxAge(60*60); //쿠키 유효시간 60초 * 60초 = 1시간
response.sendRedirect("loginOk.jsp"); //loginOk.jsp로 응답
}
loginOk.jsp
<body>
<%
Cookie[] cookies = request.getCookies();
for(Cookie c : cookies) {
out.print("name : " + c.getName() + "</br>");
out.print("value : " + c.getValue() + "</br></br>");
}
%>
</body>
로그인 성공 시 쿠키의 이름과 밸류값을 찍어준다.
난 아이디에 hyun을 입력했기 때문에 정상적으로 hyun이 출력됨^^
자! 이제 로그인을 하려고할 때 cookie값이 있는지 확인하여, 있다면 login 폼 대신 바로 로그인 된 상태의 창으로 갈 수 있게 해야한다.
login.jsp를 수정하자
login.jsp
<body>
<%
//저장된 쿠키를 가져옴
Cookie[] cookies = request.getCookies();
System.out.println("cookies : " + cookies);
//쿠키가 비어있는지 검사
if(cookies != null) {
for(Cookie c : cookies) {
if(c.getName().equals("memberId")) { //"memberId"라는 이름의 쿠키가 있으면
response.sendRedirect("loginOk.jsp"); //로그인 완료 화면으로 이동
}
}
}
%>
<form action="loginCon" method="post">
ID : <input type="text" name="mID"></br>
PW : <input type="password" name="mPW"></br>
<input type="submit" value="login">
</form>
</body>
[참고] 인프런 - 백기선 님의 실전 JSP - 신입 프로그래머를 위한 강좌를 보고 공부한 내용을 바탕으로 작성했습니다.
'💻 Dev > JSP & Servlet' 카테고리의 다른 글
[JSP] 게시판 미니 프로젝트 - MVC2패턴 적용 (0) | 2020.10.26 |
---|---|
[JSP] 11.JDBC(Java Database Connectivity) (0) | 2020.09.16 |
[JSP] 10.세션(Session) (0) | 2020.09.15 |
[JSP] 8.jsp request,response (0) | 2020.09.01 |
[JSP] 7.form 데이터 처리 (0) | 2020.08.31 |
[JSP] 6.Servlet 생명주기(Life-Cycle) (0) | 2020.08.30 |