Cookie

1 minute read

Cookie란

: 우리가 흔히 인터넷 사용기록에서 볼 수 있는 Cookie 이름의 뜻이 실제로 우리가 먹는 쿠키랑 연관이 있는지 몰랐다.

쿠키를 먹을때 부스러기가 남아 쿠키를 먹은 흔적이 생기듯이, 클라이언트와 서버가 연결했었던 흔적을 브라우저에 저장하는게 비슷하여 쿠키라고 부른다고 한다 ㅎㅎ

image-20200316143621729

브라우저가 자체적으로만든 쿠키

image-20200316143742489

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>
</head>
<body>
		<%-- 쿠키가 이미 있으면 로그인 폼 보여줄 필요가 없기 때문에 체크 --%>
		<% 
				Cookie[] cookies = request.getCookies();
				System.out.println("cookies : "+cookies);


				if(cookies != null){ 
					for(Cookie c:cookies){
						if(c.getName().equals("memberId")){
							response.sendRedirect("loginOk.jsp");
							//쿠키 유효기간안에 다시 로그인을 한다면 로그인 할 필요 없이 바로 넘어감
						}
					}
						
				}
		%>
	<%-- 로그인 형식 --%>
	<form action="loginCon" method="post">
	 	ID :  <input type="text" name="mID" ><br>
	 	PW :  <input type="text" name="mPW" ><br>
	 	<input type="submit" value="login">
	</form>

</body>
</html>
loginCon.java (Servlet)
package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Servlet;
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("/loginCon")
public class loginCon extends HttpServlet{

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		String mId = request.getParameter("mID");
		String mPw = request.getParameter("mPW");
		
		out.println("mID:"+mId);
		out.println("mPW:"+mPw);
		
		Cookie[] cookies = request.getCookies(); //쿠키는 클라이언트에 저장이 됨 , 클라이언트의 요청에 저장
		Cookie cookie = null;
		
		for(Cookie c: cookies)
		{
			System.out.println("이름:"+c.getName()+"값:"+c.getValue());
			if(c.getName().equals("memberId"))
			{
				cookie = c;
			}				
		}
		if(cookie ==null) {
			System.out.println("쿠키가 없습니다.");
			cookie  = new Cookie("memberId",mId);
		}
		
		response.addCookie(cookie);
		cookie.setMaxAge(60*60); //시간을 설정 쿠키 유효 만료 기간 1시간
		
		response.sendRedirect("loginOk.jsp");
	
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

로그인이 완료되면 저장된 쿠키를 보여줌!

loginOk.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>


		<% 
				Cookie[] cookies = request.getCookies();
				for(Cookie c : cookies)
				{
					out.println("name: "+c.getName()+"<br>");
					out.println("value: "+c.getValue()+"<br>");
					out.println("-----------------------------<br>");
				}
		%>

</body>
</html>

image-20200316151552064

코드를 돌려보는중 , login 창에서 서블릿으로 넘어가는데 자꾸 404 에러가 떴다 ㅠ 제대로 쓴거같은데 계속 에러가 뜨길래 다른 서블릿도 실행해봤는데 잘 나왔다. 구글링해보다가 해결책을 찾았다.

https://gunnm.tistory.com/83

톰캣이 설치된 경로에 생성되어있는 work 폴더를 삭제 후 다시 서버를 껐다 키니까 제대로 동작했다.:relieved:

image-20200316151939261

Comments