Skip to content

Latest commit

 

History

History
144 lines (82 loc) · 3.84 KB

Java (37) 5f4635fada794750bf4b796c0776a223.md

File metadata and controls

144 lines (82 loc) · 3.84 KB

Java (37)

작업중: In progress 태그: Dev, 백엔드프로그래밍, 웹&모바일, 자바프로그래밍기초 학습일: 02/22/2023

49. HTTPSession 로그인/로그아웃

세션으로 클라이언트 구분하기

브라우저의 첫방문 → 쿠키가 없다 → HTTPSession (세션ID=쿠키) 생성

Cookie : 웹서버가 웹브라우저에게 보내는 부가정보

& 웹브라우저가 관리

& 웹서버 방문 시 제출

eg. 코스트코 멤버쉽 카드 & 회원 번호

  • 세션ID는 cookie기술을 이용하여 주고 받는다

    ⇒ 웹브라우저가 쿠키를 허용하지 않으면 세션ID를 주고받을 수 없다

cf

  • Connection-Oriented

    ㄴ stateful

    ㄴ stateless

  • Connectionless

세션 생성 및 사용과 처리과정 요약

[Web Browser : Client] → [Servlet Container : Server] → [DBMS]

  1. 클라이언트의 첫 요청
  2. 서버에서 세션 생성
  3. 세션→서버의 세션ID 부여 ← 응답헤더에 포함 “쿠키생성”
  4. 클라이언트에 응답 & 보관 : 쿠키 기술
  5. 추후 클라이언트의 요청에 세션ID포함 ← 요청헤더에 포함 “쿠키읽기”
  6. 서버는 전달된 세션ID로 세션에서 찾아 사용

cf. 첫 요청이 아닐 경우

  1. 요청 프로토콜에 세션 ID가 있다

1-1) 유효하다 : 찾은 세션 전달 & 세션 ID는 전달되지 않는다

1-2) 유효하지 않다 : 2) 수행

  1. 없다 ⇒ 새 객체 생성해서 세션 ID전달
  • 쿠키 생성

응답 프로토콜에 이름=값 형태로 하나씩 전달한다

유효기간을 설정하지 않으면 웹브라우저가 종료될 때 까지 유지된다

  • 쿠키 보관

세션ID는 웹브라우저 메모리에 보관된다

한 마디로, 웹브라우저를 종료하면 쿠키 정보가 삭제 ⇒ 세션ID가 삭제된다

  • 쿠키 읽기

요청 프로토콜에 이름으로 한 개씩 추출하지 않고 한 번에 배열로 받는다

요청 헤더에 쿠키가 한 개라도 없으면 null이 리턴된다

📍 웹브라우저나 tab들이 몇 개 더라도 하나의 쿠키테이블을 공유한다 ⇒ 쿠키 테이블을 공유하는 모든 웹브라우저가 닫혀야 쿠키가 무효화된다

cf. 사생활보호모드(private)의 경우 공유하지 않는다


sendRedirect() : 웹 브라우저에게 전달하는 URL이 들어간다

브라우저일 경우, 서버root로 생각 후 상대경로 설정한다

contextroot 가 아니다

setMaxAge() : 쿠키 보존시간 지정

seconds 기준 / negative나 0을 할 경우 삭제된다

세션과 쿠키를 이용하여 로그인 처리

cf.

  • 조건에 따라 출력되는 브라우저가 달라진다

    ⇒ 동적 JSP 활용 (.html ⇒ .jsp로 변경)

  • 기재된 순서대로 찾고 실행한다

  • web.xml

    $contextroot/*.hml, *.css, *.js, *.gif 등 정적자원

               /*.jsp 동적자원
    
         /WEB-ING
    
        class/*.class, *.properties, *.xml 등
    

    lib/ *.jar

    web.xml ⇒ web application 설정정보를 담은 파일

                                            ㄴ 자원배치정보
    
                                           서블릿/JSP, 필터, 리스너, 파라미터 등
    

    Deployment Descriptor 파일 (DD파일)

  • 게시글 작성자의 번호 저장하는 컬럼 추가

  • Refresh vs Redirect

response.sendRedirect("../auth/form");
response.setHeader("Refresh", "1; url=../auth/form");

Refresh : 브라우저의 요청 → 서버의 응답 (콘텐트 포함) → 브라우저의 콘텐트 출력

Redirect : 브라우저의 요청 → 서버의 응답 (콘텐트 미포함) → 브라우저가 콘텐트 미출력

로그인 사용자 정보는 무조건 서버쪽에서

  • 필터를 이용한 로그인 여부 검사