Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags more
Archives
Today
Total
관리 메뉴

개발공부 일지

학원수업_40day [HTML,CSS,JSP,Servlet(7day) - Cookie / Session] 본문

학원수업/Web(HMTL,CSS,JSP,Servlet)

학원수업_40day [HTML,CSS,JSP,Servlet(7day) - Cookie / Session]

짜몽- 2022. 9. 27. 11:48

먼저 쿠키, 세션 사전정보에 대해 알아보자.

 

 


 

 

 

 

1. Cookie 


클라이언트 측에 저장하는 작은 정보  
저장 용량에 제한 ( 4kb ), 저장 데이터 타입의 제한 , 문자열만 가능 
   
Cookie 생성시 유효시간을 설정하지 않으면 브라우저 실행시에만 유효,
유효시간 설정하면 그 유효시간까지 해당 Cookie는 지속되어 사용할 수 있다 
 


step1.

서블릿이 쿠키 생성해서 클라이언트 측에 저장 
  

클라이언트가 서버에 접속할 때 서버 프로그램이 클라이언트 측으로  쿠키를 전송하고 클라이언트 측에 저장한다. 
                                                        WAS
   client browser -- request --> SetCookieServlet
                                                             Cookie 생성 ( name, value ) 
                                                             cookie.setMaxAge(30); // 30초간 유효하도록 쿠키 설정 
                                                             response.addCookie(cookie); // 응답시 쿠키를 클라이언트에 전달 
                        <--response--
      cookie 저장   


step2. 

클라이언트가 접속하면 쿠키 존재여부를 확인하고 후속 작업 수행  


                                                     WAS 
   client browser -- request --> GetCookieServlet
                                                             request.getCookies() : Cookies[] 
                                                             cookies[i].getName() 과 getValue() 를 이용해 쿠키 정보 이용 
                          <-- response -- 

 

 

 


2. Session

- 사용자 정보를 서버 측에 저장 
저장 데이터의 타입 및 용량에 제한이 없음 ( but 쿠키는 문자열 타입만 가능하고 4kb 로 저장용량이 제한 )

로그인, 로그아웃시에 세션이 이용된다 

- 클라이언트의 요청이 발생하면 자동 생성된다.

- 서버상에 객체로 존재한다 ( 서버에서만 접근이 가능하여 보안이 좋다 )

세션 유효 기간 ( WAS 의 conf/web.xml 에 session timeout 설정 : apache tomcat 기본 설정은 30분) 
 1) 지정한 유효시간 내에 새로운 요청이 없으면 세션 만료  

2) 브라우저 종료시 세션 만료 
3) 로그아웃시 세션 만료 

 


HttpSession 관련 주요 메서드 
   
   HttpServletRequest 의 method 
   -  request.getSession();  or request.getSession(true); 
      : 기존 세션이 없으면 새로 생성해서 반환, 있으면 기존 세션을 반환     
   - request.getSession(false) : 기존 세션이 없으면 null 반환 , 있으면 기존 세션을 반환 
   
 HttpSession 의 method 
   - session.setAttribute(name,value) : 세션 객체에 name 과 value 쌍으로 정보를 저장    
   - session.getAttribute(name) : Object    ->  name 을 이용해 세션에 저장된 정보를 반환    
   - session.invalidate() :  세션을 무효화시킴. 주로 로그아웃시 사용 

package org.kosta.webstudy18.controller;

import java.io.IOException;
import java.sql.SQLException;

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;

import org.kosta.webstudy18.model.MemberDAO;
import org.kosta.webstudy18.model.MemberVO;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String id = request.getParameter("id");
		String password = request.getParameter("password");
		try {
			MemberVO mvo = MemberDAO.getInstance().login(id, password);
			if (mvo == null)
				response.sendRedirect("login.fail.jsp");
			else {
				HttpSession session = request.getSession();
				//기존 세션이 있으면 기존 세션 반환, 없으면 새로 생성
				session.setAttribute("mvo", mvo);
				//(name, value) : 새션 객체에 name 과 value 쌍으로 정보를 저장
				response.sendRedirect("index.jsp");
				
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
메서드 설명
setAttribute(String attrName, Object attrValue) 세션에 데이터를 저장한다
getAttribute(String attrName) 세션에서 파라미터로 지정된 이름의 속성된 데이터값을 받는다
getAttributeName() 세션에 저장되어 있는 모든 데이터의 이름

(유니크한 키 값)을 얻는다.
getId() 자동 생성된 세션의 유니크한 아이디를 얻는다.
isNew() 세션이 최초 생성되었는지, 
이전에 생성된 세션인지를 구분한다
setMaxInactiveInterval(int second) 세션의 유효기간을 설정한다
getMaxInactiveInterval 세션의 유효기간을 얻는다
(가장 최근 요청시점을 기준으로 카운트 된다)
removeAttribute(String attrName) 세션에서 특정 데이터(파리미터값) 제거
(세션제거X, 값을 삭제한다)
invalidate() 세션의 모든 데이터를 삭제한다

   - Session 과 Cookie 관계 

 

  쿠키 세션
생성위치 클라이언트 서버 (측에 저장)
보안 약한 강함
공유여부 여러 서버에서 공유가능 여러 서버에서 공유 불가
저장공간 저장할 수 있는 데이터가 제한적
(문자열타입만 가능, 4kb 저장용량 가능 )
저장할 수 있는 데이터가 제한이 없다

 


Cookie Session 을 쓰는 이유?

-> http는 stateless 하는 특성을 가지고 있다.

http는 클라이언트를 유지하고 있지 않다.

(스트링버퍼 쓰는 이유 ? 스레드세잎하기때문이다.)

WAS 는 사용자 요청에 대해 응답을 한 후, 연결을 해제한다. (Request, response 등을 해제)

- > 서버의 리소스 자원을 효과적으로 쓰기 위해 (서버자원을 효율적으로 쓰기 위해)

 

Cookie와 Session이 필요한 이유 
-> HTTP 가 Stateless 한 특성을 가지기 때문 

HTTP 의 특성 : Stateless 
  상태 유지하지 않는다 -> 접속한 사용자 정보를 유지하지 않는다 
  많은 사용자에게 서비스해야 하는 서버는 자원을 효과적으로 사용하기 위해 요청에 대한 응답이 되면
  연결을 해제하고 사용자를 유지하지 않는다 


세션 관리 : 사용자 정보를 일정 조건동안 유지 
사용자 정보를 유지하는 방식 ( 상태 정보를 유지하는 방식 )

- 사용자 정보를 유지해야 할 필요가 있을 경우(장바구니, 인증기반 커뮤니티 등)에는
세션 관리가 필요하다