개발정리

쿠키(cookie) 와 세션(session) 본문

CS/웹

쿠키(cookie) 와 세션(session)

coffee. 2023. 11. 22. 19:53

상태 정보 유지 기술

HTTP는 무상태(stateless) 비연결(connectionless)프로토콜입니다. 따라서 각 요청은 응답이 끝나면 사라지며 상태를 저장하지 않습니다.그렇기 때문에 클라이언트의 상태를 유지하기위해 데이터를 클라이언트 또는 서버에 저장해야합니다.

그때 사용하는 기술로 쿠키와 세션이 있습니다.

 

 

쿠키(cookie)

쿠키란 클라이언트에 저장하는 데이터입니다.클라이언트에 저장한 데이터를 필요에 따라 서버로 전송하여 사용합니다.

이때 쿠키는 HTTP프로토콜 요청의 헤더에 포함되며 name과 value로 구성됩니다. 필요에 따라 만료시간,유효 디렉토리,유효 도메인 등의 속성을 함께 지정할 수 있습니다.

 

 

쿠키 예제

 

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("/give")
public class GiveCookie extends HttpServlet{

	@Override
	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=UTF-8");
		
		PrintWriter out = resp.getWriter();
		
		Cookie c1=new Cookie("name","홍길동");
		c1.setMaxAge(60*60*24);
		c1.setPath("/");
		
		resp.addCookie(c1);
		
		out.print("쿠키 발급 완료");
		out.close();	
	}
}

/give로 get요청을 보냈을때 클라이언트로 <name>=<"홍길동">인 쿠키를 보내는 예제입니다.

쿠키 리스트

/give로 접속한 후 브라우저의 개발자 도구에서 쿠키를 보실 수 있습니다.

쿠키의 속성으로 name,value,domain 등의 속성을 보실 수  있습니다.

 

-Domain

   도메인에 정의된 서버에서만 사용가능

-Path

   특정 경로의 요청에만 쿠키를 전송할때 사용 path가 /면 /하위 모든 경로에서 쿠키가 전송됨

-Expired

   만료시간

 

 

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("/get")
public class GetCookie extends HttpServlet{

	@Override
	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=UTF-8");
		
		PrintWriter out = resp.getWriter();
		
		Cookie[] cookies = req.getCookies();
		
		for(Cookie c: cookies) {
			out.print("name: "+c.getName()+" "+"value: "+c.getValue());
		}
		
		out.close();
		
		
	}

	
}

request의 getCookies 를 사용하면 요청 헤더에 있는 쿠키들을 불러올수 있습니다.

 

세션(Session)

세션은 서버에 저장하는 상태정보 입니다.

세션이 생성되면 클라이언트에 고유한 id를 부여합니다.

이 고유한 아이디는 브라우저의 쿠키로 저장되며 추후 이 값을 통해 세션에 접근합니다.

 

세션 예제

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>
	<form action="setSession" method="post">
		id: <input type="text" name="id" ><br>
		pwd: <input type="text" name="pwd" ><br>
		<input type="submit" value="로그인">
	</form>
</body>
</html>

login.html

 

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


@WebServlet("/setSession")
public class SetSession extends HttpServlet{

	@Override
	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=UTF-8");
		
		HttpSession session= req.getSession();
	
		PrintWriter out=resp.getWriter();
		
		out.print("session 생성!");
		
		out.close();
		
	}

}

SetSession.java

 

 

결과

login.html에서 로그인을 하게되면 세션이 생성됩니다.

그 이후 브라우저의 쿠키를 보면 JSESSIONID가 생성된 것을 보실수 있습니다.

이값을 사용해 서버에서 클라이언트마다 생성되는 고유한 세션객체를 가져올 수 있습니다.

'CS > ' 카테고리의 다른 글

JWT  (0) 2023.09.12