2017 - 09 - 21 (목)
기본사항 정리
1 . Cookie
Cookie는 브라우저가 기록하는 데이터이다. 즉, Client 측면에서 저장하고있는 정보라고 할 수 있다. Chrome 에서 나의 방문기록이나 Cookie 정보를 볼 수 있다. 또한 이 정보를 유저들이 삭제할 수 있다. 기업에서는 이 Cookie를 활용하여 CRM(Customer relationship management)를 더욱 효율적으로 하고자 하며 이 정보는 보안상으로도 계속 문제를 발생시키고 있는 부분이 있다.
Cookie 사용을 위한 코딩 순서
1.. Cookie 객체를 하나 생성한 후 Cookie를 추가한다.
<%
Cookie cookie = new Cookie("쿠키이름", "쿠키 값");
response.addCookie(cookie);
%>
2.. Cookie값을 읽어온다.
</P>
<%
Cookie [] cookies = request.getCookies();
%>
3.. 쿠키변경 및 삭제
<%
Cookie cookie = new Cookie("name", URLEncoder.encode("바꿀값","utf-8"));
response.addCookie(cookie);
%> //쿠키 값 변경
<%
Cookie cookie = new Cookie("Cookie이름" , "Cookie 값");
cookie.setMaxAge(0);
response.addCookie(cookie);
%> //쿠키 제거
Cookie 실습
설명
기존에 생성했던 LoginForm.jsp (로그인폼) 에서 ID저장을 클릭하고 로그인했을 때 다시 로그인할 경우 쿠키에 ID저장 , ID 저장을 누르지 않았을 때는 쿠키 삭제
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.URLEncoder"%>
<%@ page session="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String target = request.getParameter("target");
String restore = request.getParameter("restore");
Cookie abc[]=request.getCookies();
if(id.equals("shj7242")&&pw.equals("1234")){
session.setAttribute("id", id);
if(target.equals("null")){
if(restore!=null){
Cookie cookie= new Cookie("restore",URLEncoder.encode(id, "utf-8"));
response.addCookie(cookie);
response.sendRedirect("/");
}else{
for(int i =0; i < abc.length; i ++){
if(abc[i].getName().equals("restore")){
Cookie abcd = new Cookie("restore","");
abcd.setMaxAge(0);
response.addCookie(abcd);}
}
response.sendRedirect("/");
}
}else{
response.sendRedirect(target); //http://localhost/index.html (root임)
}
}else{
response.sendRedirect("http://localhost/LoginForm.jsp");
}
%>
</body>
</html>
2 . SESSION
쿠키는 클라이언트 측면에서 정보를 저장하지만 SESSION은 웹 컨테이너에 정보를 보관, 즉 서버에서 생성한다. 예를들어 로그인 폼을 통해 로그인을하면 다른 페이지에있어도 로그인된 상황이 유지되어야한다. 이를 처리할 때 세션을 사용한다.
1...session 생성
<%@ page session="true"%>
<%
session.setAttribute("session 이름", "session 값")
%>
page 디렉티브의 session을 true로 주면 session이 생성된다. 또한 setAttribute() 메서드를 사용하여 session의 이름과 값을 세팅해준다.
2...session 불러오기
<%
String name = (String)session.getAttribute("ID");
%>
ID : <%=ID %>
로그인 아이디의 유지처럼 페이지에 세션을 불러와 로그인 상태인지, 로그아웃 상태인지를 점검해준다.
3...session 종료
<%
session.invalidate();
%>
메인페이지에서 로그아웃을 클릭했을 때 session이 종료되어 버튼이 로그인으로 바뀌는 것을 예로들 수 있다.
SESSION 실습
설명
1 . 메인페이지에서 로그인을 한 후 ( 세션 추가 )
2 . 메인페이지가 로그인상태가됨 (로그아웃 버튼으로 전환)
3 . 로그아웃 버튼을 누르면 세션종료 (다시 로그인 버튼으로 전환)
index.jsp의 nav바에서 로그인 부분
<%
String curId = null;
if(session.getAttribute("id") != null)
curId= (String)session.getAttribute("id");
%>
<%=curId%>
<%if(curId==null){ %>
<li><a href="LoginForm.jsp"><b>로그인</b></a></li>
<%}else{ %>
<li><a href="logout.jsp"><b>로그아웃</b></a><li>
<%} %>
logout.jsp
<body>
<%
session.invalidate();
response.sendRedirect("/");
%>
</body>
LoginAction.jsp 코드는 위에(Cookie 부분 실습 코드) 참조