쿠키를 이용하여 로그인 상태를 유지하는 방법
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;
}
}
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 |