쿠키를 이용하여 로그인 상태를 유지하는 방법


1. 로그인에 성공하면 특정 이름을 가진 쿠키를 생성

2. 해당 쿠키가 존재하면 로그인한 상태라고 판단

3. 로그아웃하면 해당 쿠키를 삭제


일단 다이나믹 웹 프로젝트 안 디렉토리 중 src 밑에 util\Cookies.java 파일을 넣는다.

이 파일은 JSP 2.3 웹 프로그래밍 책의 저자가 쿠키를 편리하게 사용하도록 만든 클래스이다.


1) Cookies.java 

package util;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.Cookie;

import java.util.Map;

import java.net.URLEncoder; 

import java.net.URLDecoder; 

import java.io.IOException; 

public class Cookies {

private Map<String, Cookie> cookieMap = 

new java.util.HashMap<String, Cookie>();

public Cookies(HttpServletRequest request) {

Cookie[] cookies = request.getCookies();

if (cookies != null) {

for (int i = 0 ; i < cookies.length ; i++) {

cookieMap.put(cookies[i].getName(), cookies[i]);

}

}

}

public Cookie getCookie(String name) {

return cookieMap.get(name);

}

public String getValue(String name) throws IOException {

Cookie cookie = cookieMap.get(name);

if (cookie == null) {

return null;

}

return URLDecoder.decode(cookie.getValue(), "utf-8");

}

public boolean exists(String name) {

return cookieMap.get(name) != null;

}

public static Cookie createCookie(String name, String value)

throws IOException {

return new Cookie(name, URLEncoder.encode(value, "utf-8"));

}

public static Cookie createCookie(String name, String value, String path, 

int maxAge) throws IOException {

Cookie cookie = new Cookie(name, URLEncoder.encode(value, "utf-8"));

cookie.setPath(path);

cookie.setMaxAge(maxAge);

return cookie;

}

public static Cookie createCookie(String name, String value, String domain,

String path, int maxAge) throws IOException {

Cookie cookie = new Cookie(name, URLEncoder.encode(value, "utf-8"));

cookie.setDomain(domain);

cookie.setPath(path);

cookie.setMaxAge(maxAge);

return cookie;

}

}


member라는 디렉토리를 만들어서 그 안에 로그인 관련 jsp 파일들을 작성해서 넣는다.

2) 로그인 폼 loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%>

<%@ page import = "util.Cookies" %> // 위에서 넣은 간단하게 쿠키를 쓰는 클래스를 임포트하여 사용

<%

String id = request.getParameter("id");

String password = request.getParameter("password");

if (id.equals(password)) { // 임시로 ID와 패스워드가 같을 때 로그인에 성공한 것으로 판단하도록 했다.

response.addCookie(Cookies.createCookie("AUTH", id, "/", -1)); 

// 로그인 상태 여부를 판단하는 AUTH란 이름의 쿠키를 만들었다.

간단하게 쿠키를 쓰도록 만든 Cookies 클래스에서 createCookie 메소드를 불러와 사용했다.

이름이 "AUTH"이고, 값은 사용자가 입력한 id인 쿠키를 생성하며 경로는 전체, 유효시간은 -1이다.

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

로그인에 성공했습니다.

</body>

</html>

<%

}

else { // 로그인 실패시

%>

<script>

alert("로그인에 실패하였습니다.");

history.go(-1);

</script>

<%

}

%>


아이디 암호 




3) 로그인 여부 판단 loginCheck.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>

<%@ page import = "util.Cookies" %>

<%

Cookies cookies = new Cookies(request);

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>로그인 여부 검사</title>

</head>

<body>

<%

if(cookies.exists("AUTH")) { // AUTH란 이름의 쿠키가 존재하면 로그인을 했다고 판단

%>

아이디 "<%= cookies.getValue("AUTH")%>"로 로그인 한 상태

<%

}

else {

%>

로그인하지 않은 상태

<%

}

%>

</body>

</html>




4) 로그아웃 처리 loginout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import = "util.Cookies" %>

<% 

response.addCookie(

Cookies.createCookie("AUTH", "", "/", 0) // 쿠키의 유효시간을 0으로 지정하면 쿠키가 삭제된다.

);

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>로그아웃</title>

</head>

<body>

로그아웃하였습니다.

</body>

</html>


로그인 시 받아왔던 쿠키가 삭제되며 로그아웃이 처리된다.


로그인을 했을 때 loginCheck가 실행되며 "아이디 XXX 로 로그인한 상태"라고 뜨고,

logout.jsp를 실행시켜 로그아웃을 해준 뒤, loginCheck.jsp를 실행시키면 "로그인하지 않은 상태"라고 뜨는 것을 확인할 수 있다.





'JSP' 카테고리의 다른 글

실습: 세션을 사용한 로그인 유지  (0) 2016.03.09
세션(session)  (0) 2016.03.09
쿠키(Cookie)  (0) 2016.03.08
실습: JSP form에서 받아온 값을 자바빈에 담아 출력하기  (0) 2016.03.08
자바빈과 <jsp:useBean> 액션 태그  (0) 2016.03.07
Posted by netyhobby
,