[Java] Cookie

46403 ワード

Cookie-クライアントに保存して何て言ったっけ?

  • ログインに成功すると、Cookieに保存するデータを
  • に設定.
    データは
  • クッキーに
  • 格納.
  • 保存したCookieは登録サイト時に
  • に自動的に加入する.
  • Cookieを読み出し、
  • にログインするかどうかを確認する.
    登録解除
  • Cookieデータ
  • を消去

    CookieTest_jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Cookie 연습</title>
    </head>
    <body>
    <a href = "<%=request.getContextPath()%>/cookieAddTest.do">
    	Cookie 정보 저장하기
    </a><br><hr><br>
    
    <a href = "<%=request.getContextPath()%>/cookieReadTest.do">
    	Cookie 정보 확인하기
    </a><br><hr><br>
    
    <a href = "<%=request.getContextPath()%>/cookieDeleteTest.do">
    	Cookie 정보 삭제하기
    </a><br><hr><br>
    
    </a>
    </body>
    </html>

    Cookieストレージ


    1.Cookieオブジェクトを生成します.クッキー変数とクッキー値が必要です.クッキー変数とクッキー値は文字列で指定されます.クッキーは文字列しか保存できないので
    タイプ)Cookie Cookie変数=new Cookie(「Cookie変数」,「Cookie値」)
    Cookie値としてハングルを使用する場合は、URLがエンコードされます.encode()メソッドで符号化して保存します.
    2.Cookie属性の設定
    1)Cookie変数.setPath("適用パス");//指定したパスとそのサブパスで使用できます.
    省略する場合は、クッキー時のパスを設定します.
    2)Cookie変数.SetMaxAgent(保存時間);単位(秒)
    保持時間が負:ブラウザ終了まで保持(デフォルト)
    維持時間は0:Cookieを直ちに削除します.
    3)Cookie変数.setDomain(「アプリケーションドメイン名」);
    「.ddit.or.kr」の場合はwww.dditを参照してください.or.krかwww 2.ddit.or.よろしい
    Cookie変数.setSecure(セキュリティ);=>true:適用false:trueが適用されていない場合(デフォルト)httpは使用できません
    3.応答オブジェクトを使用してCookieをWebブラウザに送信し、WebブラウザはCookieを受信して保存する.
    を選択)オブジェクトに応答します.addCookie(最初に作成されたCookieオブジェクト)
    package kr.or.ddit.basic.cookie;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.URLEncoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    @WebServlet("/cookieAddTest.do")
    public class CookieAddTest extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("UTF-8");
    		response.setCharacterEncoding("utf-8");
    		
    		response.setContentType("text/html; charset=utf-8");
    		PrintWriter out = response.getWriter();
    		
    		// Cookie 저장법
    		// 1. Cookie 객체를 생성한다. 쿠키변수와 쿠키값이 필요하다. 쿠키변수와 쿠키값은 문자열로 지정한다. 쿠키는 문자열밖에 저장을 못하기 때문
    		// 형식) Cookie cookie변수 = new Cookie('쿠키변수', '쿠키값');
    		// 쿠키값으로 한글을 사용할 경우 URLEncoding.encode()메서드로 인코딩 후 저장한다.
    		
    		Cookie nameCookie = new Cookie("name", URLEncoder.encode("홍길동", "UTF-8"));
    		Cookie ageCookie = new Cookie("age", String.valueOf(30)); // 숫자는 문자열로 변환해야한다.
    		Cookie cityCookie = new Cookie("city", "seoul");
    		
    		// 2. 쿠키 속성 설정
    		//1) 쿠키변수.setPath("적용경로"); // 지정한 경로와 그 하위 경로에서 사용 가능하다.
    		// 생략하면 쿠키를 설정할 당시의 경로가 설정된다. 
    		//2) 쿠키변수.setMaxAge(유지시간); 단위(초)
    		// 유지시간이 음수 : 브라우저가 종료될 때까지 유지(기본값)
    		// 유지시간이 0 : 즉시 쿠키가 삭제된다.
    		//3) 쿠키변수.setDomain("적용도메인명");
    		// 예) ".ddit.or.kr" 이면 www.ddit.or.kr이나 www2.ddit.or.kr도됨
    		// 쿠키변수.setSecure(보안여부); = > true:적용, false:미적용(기본값) true인 경우 http에서 못씀 
    		
    		
    		// 3. response객체를 이용하여 쿠키를 웹브라우저로 보내면 웹브라우저가 이 쿠키를 받아서 저장한다.
    		// 형식) response객체.addCookie(1번에서 만든 Cookie객체)
    		response.addCookie(nameCookie);
    		response.addCookie(ageCookie);
    		response.addCookie(cityCookie);
    		
    		out.println("<html><head><meata charset='utf-8'>");
    		out.println("<title>Cookie연습</title></head>");
    		out.println("<body>");
    		out.println("<h2>Cookie 데이터가 저장되었습니다.</h2>");
    		
    		out.println("<a href = '" +request.getContextPath()+ "/cookie/cookieTest.jsp'> 시작문서로 가기</a>");
    		out.println("</body><html>");
    		
    	}
    
    	
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(request, response);
    	}
    
    }
    

    保存したCookie情報の取得

  • は、要求オブジェクトを使用して完全なCookie情報を取得する.
    インポートしたCookie情報は配列に格納されます.
    フォーマット)Cookie[]Cookie配列変数=request.getCookie();
    2.クッキーの配列から該当するクッキー情報を取得します.
  • package kr.or.ddit.basic.cookie;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.URLDecoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    @WebServlet("/cookieReadTest.do")
    public class CookieReadTest extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("utf-8");
    		response.setCharacterEncoding("utf-8");
    		response.setContentType("text/html; cahrset=utf-8");
    		
    		PrintWriter out = response.getWriter();
    		
    		// 저장된 Cookie정보 읽어오기
    		// 1. 전체 Cookie정보를 Request객체를 이용해서 가져온다.
    		// 가져온 Cookie 정보들은 배열에 저장된다.
    		// 형식) Cookie[] 쿠키배열변수 = request.getCookie();
    		Cookie[] cookieArr = request.getCookies();
    		
    		out.println("<html><head><meata charset='utf-8'>");
    		out.println("<title>Cookie 읽기연습</title></head>");
    		out.println("<body>");
    		out.println("<h2>저장된 Cookie데이터 확인하기</h2>");
    		
    		if(cookieArr==null || cookieArr.length==0) {
    			out.println("<h2> 저장된 쿠키가 하나도 없습니다. </h2>");
    		}else {
    			// 2.쿠키 배열에서 해당 쿠키 정보를 구해온다.
    			for(Cookie cookie : cookieArr) {
    				String name = cookie.getName(); //쿠키변수구하기
    				//String value = cookie.getValue(); //쿠키값구하기
    				
    				// 쿠키값으로 저장된 데이터가 한글일 경우 디코딩해서 사용한다.
    				String value = URLDecoder.decode(cookie.getValue(), "utf-8");
    				
    				out.println("쿠키변수: "+ name + "<br>");
    				out.println("쿠키값: "+ value + "<hr>");
    				
    			}
    			
    		}
    		
    		out.println("<a href = '" +request.getContextPath()+ "/cookie/cookieTest.jsp'> 시작문서로 가기</a>");
    		out.println("</body><html>");
    		
    		}
    
    	
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(request, response);
    	}
    
    }
    

    Cookieの削除

  • Cookieデータの削除は、Cookieの保持時間を0に設定する方法を用いる.
  • 削除するCookieを見つけてから、そのCookieの保存時間を0に設定し、addCookie()メソッドで再保存すればよい.
  • package kr.or.ddit.basic.cookie;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/cookieDeleteTest.do")
    public class CookieDeleteTest extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	
    		// 저장된 Cookie 삭제하기
    		response.setCharacterEncoding("utf-8");
    		response.setContentType("text/html; charset=utf-8");
    		PrintWriter out = response.getWriter();
    		
    		// 1. 쿠키 데이터의 삭제는 쿠키의 유지시간을 0으로 설정하는 방법을 사용한다. 
    		// 먼저 삭제할 쿠기를 구한 후 이 쿠키의 유지시간을 0으로 설정한 후 addCookie()메서드로 다시 저장하면 된다.
    		
    		Cookie[] cookieArr = request.getCookies();
    		
    		out.println("<html><head><meata charset='utf-8'>");
    		out.println("<title>Cookie 삭제연습</title></head>");
    		out.println("<body>");
    		out.println("<h2>저장된 Cookie 데이터 삭제하기 </h2> ");
    		
    		if(cookieArr==null || cookieArr.length==0) {
    			out.println("<h3>삭제할 쿠키가 하나도 없습니다.</h3>");
    		}else {
    			//반복문을 사용해서 삭제할 쿠키를 찾는다. 
    			
    			for(Cookie cookie : cookieArr) {
    				String name = cookie.getName(); // '쿠키변수'값 구하기
    				
    				// 예:city쿠키변수에 저장된 쿠키삭제하기
    				if("city".equals(name)) { // 삭제할 쿠키 찾기
    					cookie.setMaxAge(0); // 유지시간을 0으로 설정한다.
    					response.addCookie(cookie); // 변경된 쿠키를 저장한다.
    				}
    			}
    		}
    		
    		
    		out.println("<a href = '" +request.getContextPath()+ "/cookie/cookieTest.jsp'>시작문서로 가기</a>");
    		out.println("</body><html>");
    		
    		
    		
    	}
    
    	
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    	}
    
    }
    

    Cookie例1




    jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
       pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <style type="text/css">
    div{
    border: 1px solid black;
    width: 300px;
    height: 100px;
    }
    </style>
    </head>
    <body>
    <div>
    
    <a href = "<%=request.getContextPath()%>/cookieCountServlet.do">
    	Cookie Count 증가하기</a>
    
    
    <br><br>
    
    <a href = "<%=request.getContextPath()%>/cookieCountDelServlet.do">
    	Cookie Count 초기화 하기 </a>
    	<br><br>
    
    </div>
    
    </body>
    </html>

    副手

    package kr.or.ddit.basic.cookie;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class CookieCountServlet
     */
    @WebServlet("/cookieCountServlet.do")
    public class CookieCountServlet extends HttpServlet {
    //	int num=0;
    	private static final long serialVersionUID = 1L;
    
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("UTF-8");
    		
    		response.setContentType("text/html; charset=utf-8");
    		PrintWriter out = response.getWriter();
    		
    	
    	//	num++;
    		
    		
    		//count라는 쿠키가 있는지 검사한다.
    		Cookie[] cookies = request.getCookies();
    		
    		int num= 0;
    		if(cookies!=null) {
    			for(Cookie cookie : cookies) {
    				String name = cookie.getName(); //쿠키변수 구하기
    				if("count".equals(name)) {
    					//현재의 count값구하기
    					num = Integer.parseInt(cookie.getValue());
    					break;
    				}
    			}
    		}
    		
    		num++;
    		
    		// 증가된 count값을 저장한다.
    		
    		Cookie count = new Cookie("count", String.valueOf(num)); // 숫자는 문자열로 변환해야한다.
    		response.addCookie(count);
    		
    		out.println("<html><head><meata charset='utf-8'>");
    		out.println("<title></title></head>");
    		out.println("<body>");
    		out.println("<h2>어서오세요. 당신은 "+ count.getValue()+ "번째 방문입니다. </h2>");
    		
    		
    		out.println("<a id='aid' href = '" +request.getContextPath()+ "/cookieCountServlet.do' >카운트 증가하기</a>");
    		
    		out.println("<a href = '" +request.getContextPath()+ "/cookie/cookieTest02.jsp'>시작문서로 가기</a>");
    		out.println("</body><html>");
    		
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(request, response);
    	}
    
    }
    

    CookieでIDを覚える例



    Main_jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    <h2>cookie 연습용 main 페이지 입니다.</h2>
    
    <a href = "<%=request.getContextPath()%>/cookie/cookieLogin.jsp">
    	login창으로 이동
    </a>
    </body>
    
    </html>

    Login_jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <style type="text/css">
    div{
    border: 1px solid black;
    width: 300px;
    height: 100px;
    }
    
    label{
    
    margin:10px;
    }
    
    </style>
    </head>
    <body>
    <%
    	// 스크립트릿영역 => java코드를 작성하는 영역
    	// 쿠키값 구하기(쿠키변수가 userId인 쿠키값 구하기)
    	Cookie[] cookies = request.getCookies();
    	
    	String cookieUserId = ""; // 쿠키에 저장된 userid값이 저장될 변수
    	String chk = ""; //체크박스 체크용 변수
    	
    	if(cookies!=null){
    		for(Cookie c : cookies){
    			if("id".equals(c.getName())){ //원하는 쿠키 변수 찾기
    				cookieUserId = c.getValue(); // 쿠키값 구하기
    				chk = "checked";
    				
    			}
    		}
    	}
    		
    	
    %>
    <div>
    
    <form action="<%=request.getContextPath()%>/cookieLoginServlet.do" >
    
     <label>아이디:</label>
        <input type="text" id="id" name="id" value="<%=cookieUserId%>" placeholder="ID를 입력하세요"><br>
        
     <label>비밀번호: </label>
        <input type="password" id="pass" name="pass" placeholder="PassWord를 입력하세요" ><br>
        
       <label><input type="checkbox" name="check" <%=chk%> value="1" >id기억하기 </label><br>
        <input type="submit" value="로그인">
        
    </form>
    
    </div>
    </body>
    
    <script type="text/javascript">
    
    
    </script>
    

    副手

    package kr.or.ddit.basic.cookie;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    // 아이디 패스워드가 test, 1234인지 확인
    // 맞으면 홈으로 아니면 체크박스유무에 따라 다시 보여줌.
    
    
    
    @WebServlet("/cookieLoginServlet.do")
    public class CookieLoginServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("UTF-8");
    		response.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html; charset=utf-8");
    		
    		PrintWriter out = response.getWriter();
    		String id = request.getParameter("id");	
    		String pass = request.getParameter("pass");	
    		String check = request.getParameter("check");	
    		
    		//쿠키 객체 생성
    		Cookie idc = new Cookie("id", id);
    		Cookie passc = new Cookie("pass", pass);
    		
    		if(request.getParameter("check")!=null) { //체크박스를 눌렀으면
    			
    			// 쿠키저장
    			response.addCookie(idc);		
    			
    		}else { //체크박스를 안눌렀으면
    			
    			//쿠키 삭제
    			idc.setMaxAge(0);
    			response.addCookie(idc);
    			
    				
    		}
    		
    		if(idc.getValue().equals("test")&& passc.getValue().equals("1234")){ //잘입력했으면
    
    			response.sendRedirect(request.getContextPath()+"/cookie/CookieMain.jsp");
    			
    		}else { //잘입력안했으면
    			response.sendRedirect(request.getContextPath()+"/cookie/cookieLogin.jsp");
    	
    		}
    		
    
    	}
    	
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(request, response);
    	}
    
    }