• 티스토리 홈
  • 프로필사진
    chantleman
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
chantleman
  • 프로필사진
    chantleman
    • 분류 전체보기 (328)
      • 프로젝트 (1)
      • react (2)
      • 코딩테스트 (133)
        • lv0 (101)
        • lv1 (10)
        • lv2 (7)
        • lv3 (15)
      • 오류 (14)
      • 리눅스 (5)
      • 자바 (75)
        • spring (7)
      • js (35)
      • 오라클 (39)
        • PLSQL (3)
      • cs (5)
      • 도커 aws (3)
      • 단축키 (3)
      • 나만봐 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 쿠키, 세션
        2024년 09월 04일
        • chantleman
        • 작성자
        • 2024.09.04.:06

         

        쿠키

         

        웹 서버와 브라우저는 애플리케이션을 사용하는 동안 필요한 값을 쿠키를 통해 공유하며 상태를 유지함

         

        1. 구성요소

        - 이름(key)

        - 값(value)

        - 유효시간(초)

        - 도메인: 쿠키의 도메인이 쿠키를 생성한 서버의 도메인을 벗어나면 브라우저는 쿠키를 저장하지 않는다.

        - 경로: 쿠키를 공유할 기준 경로를 저장한다.

         

        2. 동작방식

        - 쿠키생성단계: 생성한 쿠키를 응답 데이터의 헤더에 저장하여 브라우저에 전송

        - 쿠키저장단계: 브라우저는 응답데이터에 포함된 쿠키를 쿠키저장소에 저장

        - 쿠키전송단계: 브라우저는 저장한 쿠키를 요청이 있을 때마다 웹서버에 전송

         


        세션

         

        - 세션을 통해서 사용자별로 구분하여 정보를 관리할 수 있다. (세션 ID 이용)

        - 쿠키를 사용할 때보다 보안이 향상된다. (서버 사이드에 저장되기 때문)

         

         

        1. 세션 객체를 가져오는 방법

         

        HttpSession session = req.getSession(boolean 값)

          → boolean: true        =>   세션 객체가 존재하지 않으면 새로 생성함

                              false      =>   세션 객체가 존재하지 않으면 null  

         

         

        2. 세션 객체 삭제 처리 방법

        •  invalidate() 메소드 사용
        •  setMaxInactiveInterval(int interval) 메소드 호출 → 일정 시간동안 요청이 없으면 세션 객체 삭제 
        •  web.xml <session-config> 이용하여 설정하기 (분단위)

         예 ) 학교 수강신청할 때 30분동안만 로그인 지속되게 함

                

        로그인 정보를 쿠키에 저장하면 모두가 볼 수 있기때문에 세션에 저장해야합니다.

         

         

         

         

          쿠키 세션
        저장위치 클라이언트(접속자pc) 웹서버
        소멸시기 쿠키 저장시 만료기간 설정 브라우저 종료시 만료기간에 상관없이 삭제(만료기간 지정 가능)
        저장타입 파일 객체
        저장정보 지워져도 되고, 조작되거나 가로채이더라도 큰 지장이없는 수준의 정보들 사용자나 다른 누군가에게 노출되면 안되는 중요한 정보들
        속도 쿠키>세션
        보안 쿠키< 세션

         

         

         


        쿠키 예제

         

         

        setCookieExam() 메소드 실행했을 때 

        		private void setCookieExam(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        		//쿠키 생성하기
        		Cookie userId = new Cookie("userId", req.getParameter("userId"));
        		Cookie name = new Cookie("name",req.getParameter("name"));
        		
        		//쿠키 소멸 시간 저장하지 않으면 브라우저가 종료시 쿠키를 삭제함
        		userId.setMaxAge(60*60*24);
        		
        		//javaScript를 이용한 직접 접근(조작) 방지
        		userId.setHttpOnly(true);
        		
        		resp.addCookie(userId);
        		resp.addCookie(name);
        		
        		PrintWriter out= resp.getWriter();
        		String title="쿠키 설정 예제";
        		out.print("<html>");
        		out.print("<head>");
        		out.print("<title>"+title+"</title>");
        		out.print("</head>");
        		out.print("<body>");
        		out.print(req.getParameter("userId"));
        		out.print(req.getParameter("name"));
        		out.print("</body>");
        		out.print("</html>");
        		
        	}

         

         

        ?userId= {userid} & name={name} 쿼리 직접 입력하면 쿠키에 저장된 것을 확인할 수 있습니다.

        (F12 - Application - Cookies에서)

         

         

         

         


         

        readCookieExam() 메소드 실행했을 때 

        		private void readCookieExam(HttpServletRequest req, HttpServletResponse resp)throws IOException {
        		Cookie[] cookies = req.getCookies();
        		resp.setCharacterEncoding("UTF-8");
        		resp.setContentType("text/html");
        		
        		PrintWriter out= resp.getWriter();
        		
        		String title="쿠키 설정 읽기 예제";
        		out.print("<html>");
        		out.print("<head>");
        		out.print("<title>"+title+"</title>");
        		out.print("</head>");
        		out.print("<body>");
        		for(Cookie cookie:cookies) {
        			out.print("<p>name: "+cookie.getName()+"</p> <br>");
        			out.print("<p>value: "+cookie.getValue()+"</p> <br>");
        		}
        		
        		out.print("</body>");
        		out.print("</html>");
        	}

         

         

        아까 저장했던 쿠키 정보를 불러온 것을 확인할 수 있습니다.

         

         

         

         


         

         

        deleteCookieExam() 메소드 실행했을 때

        		private void deleteCookieExam(HttpServletRequest req, HttpServletResponse resp) throws IOException{
        		Cookie[] cookies = req.getCookies();
        		resp.setCharacterEncoding("UTF-8");
        		resp.setContentType("text/html");
        		
        		PrintWriter out = resp.getWriter();
        		String title = "쿠키정보 삭제 예제";
        		
        		out.print("<html>");
        		out.print("<head>");
        		out.print("<title>"+title+"</title>");
        		out.print("</head>");
        		out.print("<body>");
        		
        		if(cookies!=null) {
        			for(Cookie cookie:cookies)
        			{
        				cookie.setMaxAge(0);
        				resp.addCookie(cookie);
        				out.print("<p>삭제 요청한 쿠키: "+cookie.getName()+"</p><br>");
        				out.print("<p>삭제 요청한 쿠키: "+cookie.getValue()+"</p><br>");
        			}
        		}
        		else {
        			out.print("<h2>쿠키 정보가 없습니다.</h2>");
        		}
        		
        		out.print("</body>");
        		out.print("</html>");
        	}

         

         

        쿠키 정보가 삭제된 것을 확인할 수 있습니다.

         

         

         

         


         

        <전체코드 >

        	public class T05ServletCookieTest extends HttpServlet{
                @Override
                protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                    req.setCharacterEncoding("UTF-8");
                    setCookieExam(req,resp);
            //		readCookieExam(req,resp);
            //		deleteCookieExam(req,resp);
                }
        
                private void deleteCookieExam(HttpServletRequest req, HttpServletResponse resp) throws IOException{
                    Cookie[] cookies = req.getCookies();
                    resp.setCharacterEncoding("UTF-8");
                    resp.setContentType("text/html");
        
                    PrintWriter out = resp.getWriter();
                    String title = "쿠키정보 삭제 예제";
        
                    out.print("<html>");
                    out.print("<head>");
                    out.print("<title>"+title+"</title>");
                    out.print("</head>");
                    out.print("<body>");
        
                    if(cookies!=null) {
                        for(Cookie cookie:cookies){
                            cookie.setMaxAge(0);
                            resp.addCookie(cookie);
                            out.print("<p>삭제 요청한 쿠키: "+cookie.getName()+"</p><br>");
                            out.print("<p>삭제 요청한 쿠키: "+cookie.getValue()+"</p><br>");
                        }
                    }
                    else {
                        out.print("<h2>쿠키 정보가 없습니다.</h2>");
                    }
        
                    out.print("</body>");
                    out.print("</html>");
                }
        
                private void readCookieExam(HttpServletRequest req, HttpServletResponse resp)throws IOException {
                    Cookie[] cookies = req.getCookies();
                    resp.setCharacterEncoding("UTF-8");
                    resp.setContentType("text/html");
        
                    PrintWriter out= resp.getWriter();
        
                    String title="쿠키 설정 읽기 예제";
                    out.print("<html>");
                    out.print("<head>");
                    out.print("<title>"+title+"</title>");
                    out.print("</head>");
                    out.print("<body>");
                    for(Cookie cookie:cookies) {
                        out.print("<p>name: "+cookie.getName()+"</p> <br>");
                        out.print("<p>value: "+cookie.getValue()+"</p> <br>");
                    }
        
                    out.print("</body>");
                    out.print("</html>");
                }
        
                private void setCookieExam(HttpServletRequest req, HttpServletResponse resp) throws IOException {
                    //쿠키 생성하기
                    Cookie userId = new Cookie("userId", req.getParameter("userId"));
                    Cookie name = new Cookie("name",req.getParameter("name"));
        
                    //쿠키 소멸 시간 저장하지 않으면 브라우저가 종료시 쿠키를 삭제함
                    userId.setMaxAge(60*60*24);
        
                    //javaScript를 이용한 직접 접근(조작) 방지
                    userId.setHttpOnly(true);
        
                    resp.addCookie(userId);
                    resp.addCookie(name);
        
                    PrintWriter out= resp.getWriter();
                    String title="쿠키 설정 예제";
                    out.print("<html>");
                    out.print("<head>");
                    out.print("<title>"+title+"</title>");
                    out.print("</head>");
                    out.print("<body>");
                    out.print(req.getParameter("userId"));
                    out.print(req.getParameter("name"));
                    out.print("</body>");
                    out.print("</html>");
                }
            }

         

         


        세션 예제

         

        	@WebServlet("/T06")
            public class T06ServletSessionTest extends HttpServlet {
        
                @Override
                protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                    HttpSession session = req.getSession(true);
        
                    //생성 시간 가져오기
                    Date date = new Date(session.getCreationTime());
        
                    //마지막 접근시간 가져오기
                    Date lastAccessTime = new Date(session.getLastAccessedTime());
        
                    String title = "";
                    int visitCnt = 0;
                    String userId="sem";
        
                    session.setMaxInactiveInterval(30); //30분동안 세션 유지
        
                    if(session.isNew()) {
                        title = "처음 방문을 환영합니다.";
                        session.setAttribute("userId", userId);
                    }
                    else {
                        visitCnt = (int) session.getAttribute("visitCnt");
                        visitCnt++;
                        userId = (String) session.getAttribute("userId");
                    }
                    session.setAttribute("visitCnt", visitCnt);
        
                    resp.setCharacterEncoding("UTF-8");
                    resp.setContentType("text/html");
        
                    PrintWriter out = resp.getWriter();
        
                    out.println("<html>");
                    out.println("<title>"+title+"</title>");
                    out.println("<body>");
                    out.println("<p> 세션ID: "+session.getId()+"</p><br>");
                    out.println("<p> 생성시간: "+date+"</p><br>");
                    out.println("<p> 마지막 접근시간: "+lastAccessTime+"</p><br>");
                    out.println("<p> 사용자 id: "+userId+"</p><br>");
                    out.println("<p> 방문 횟수: "+visitCnt+"</p><br>");
                    out.println("</body>");
                    out.println("</html>");
                }
            }

         

         

         

        브라우저별로 세션 ID가 다른 것 확인

         

         

        728x90

        '자바' 카테고리의 다른 글

        getAttribute(), getParameter(), VO  (1) 2024.09.08
        servlet filter  (0) 2024.09.04
        웹모듈 배포  (0) 2024.09.02
        servlet  (0) 2024.09.02
        resultType과 resultMap 차이  (0) 2024.09.01
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바