쿠키와 세션의 원리

9065 단어
Session 원리:
session은 파일, 메모리, 데이터베이스에 둘 수 있으며 키 값이 맞는 형식으로 저장됩니다.Session도 key-value의 속성입니다.
프로그램이 어떤 클라이언트의 요청에session을 만들어야 할 때 서버는 먼저 이 클라이언트의 요청에session 표지가 포함되어 있는지 확인합니다. 이것은session-id라고 합니다. 만약session id가 포함되어 있다면 이전에 이 클라이언트에 session을 만들었음을 의미합니다.서버는 세션 id에 따라 이 세션을 검색해서 사용합니다. (검색이 안 되면 getSeesion () 방법에 따라 파라미터를 새로 만들 수 있습니다.) 클라이언트가 세션 id를 포함하지 않으면 이 클라이언트에 세션을 만들고 이 세션과 연결된 세션 id를 생성합니다. 이 세션 id는 이번 응답에서 클라이언트에게 저장됩니다.
Session의 클라이언트 구현 형식 (즉 session id 저장 방법)
일반 브라우저는 다음과 같은 3가지 방법으로 저장할 수 있습니다.
[1] 쿠키를 사용하여 저장합니다.이것은 가장 흔히 볼 수 있는 방법이다.'내 로그인 상태 기록'기능의 실현은 바로 이런 방식을 바탕으로 하는 것이다.서버는 쿠키를 설정하는 방식으로 세션 id를 브라우저에 보냅니다.만약 우리가 만료 시간을 설정하지 않는다면, 이 쿠키는 하드디스크에 저장하지 않을 것입니다. 브라우저가 닫힐 때, 쿠키는 사라지고, 이session id는 분실됩니다.만약 우리가 이 시간을 설정한다면 이 쿠키는 클라이언트 하드디스크에 저장될 것입니다. 브라우저가 닫혀도 이 값은 존재합니다. 다음에 해당 사이트를 방문할 때도 서버에 전송됩니다.
[2] URL을 다시 쓰는 것은 바로 session id를 URL 경로의 뒤에 직접 추가하는 것이다. 즉, 우리가 자주 보는 JSP 사이트에aaa가 있는 것이다.jsp?JSESSIONID=* 와 같습니다.
【3】 웹 폼에 숨겨진 영역을 추가한다. 이런 방식은 사실상 두 번째 방식과 같다. 전자는 GET 방법으로 데이터를 보내고 후자는 POST 방식으로 데이터를 보낸다.하지만 후자는 비교적 번거롭다.
바로 서버가 자동으로 폼을 수정하고 숨겨진 필드를 추가합니다. 폼을 제출할 때session id를 서버로 전달할 수 있습니다.예:
1 <form name="testform" action="/xxx">
2 <input type="hidden" name="jsessionid"
3 value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBug!-145788764">
4 <input type="text">
5 form>

세션은 언제 생성됩니까?
흔히 볼 수 있는 오류는 세션이 클라이언트가 접근할 때 생성된다고 생각하지만, 사실은 어떤 서버 프로그램 (예를 들어 Servlet) 이 Http Servlet Request를 호출할 때까지.getSession(true) 같은 문장이 만들어집니다.
세션은 언제 삭제됩니까?
세션은 다음 상황에서 삭제됩니다.
A. 프로그램이 HttpSession을 호출합니다.invalidate()
B. 마지막으로 클라이언트로부터 session id를 받은 시간 간격이 session의 최대 유효 시간을 초과하였습니다.
C. 서버 프로세스가 중지됨
다시 한 번 브라우저를 닫으면 클라이언트 브라우저 메모리에 저장된session 쿠키만 효력을 상실하고 서버 측의session 대상을 효력을 상실하지 않습니다.
getSession()/getSession(true), getSession(false)의 차이
getSession ()/getSession (true): session이 존재할 때 이 session을 되돌려줍니다. 그렇지 않으면 새 session을 만들고 대상을 되돌려줍니다.
getSession(false): session이 존재할 때 이 session을 되돌려줍니다. 그렇지 않으면 새 session,null을 되돌려주지 않습니다.
 
쿠키 메커니즘:
쿠키 종류:
1. 하드 디스크 공간에 영구적인 쿠키가 파일 방식으로 존재한다.영구 쿠키는 클라이언트 하드디스크에 저장된 쿠키 정보(일정한 유효기간 설정)를 가리키며, 사용자가 특정한 사이트를 방문할 때 브라우저는 로컬 하드디스크에서 이 사이트와 관련된 쿠키를 찾습니다.이 쿠키가 존재하면 브라우저는 HTTP 헤더 정보를 통해 사이트에 보낼 수 있도록 페이지 요청과 함께 쿠키의 속성과 값이 서버에 저장된 정보와 일치하는지 여부를 비교합니다.비교 결과에 따라 사용자를'초방문자'또는'고고객'으로 확정한다.
2. 브라우저가 차지하는 메모리에 머무르는 임시 쿠키는 Internet Explorer를 닫으면 컴퓨터에서 삭제됩니다.
쿠키 유효기간:
쿠키의 maxAge는 쿠키의 유효기간을 초로 결정합니다.
maxAge 속성이 양수이면 이 쿠키는 maxAge 초 후에 자동으로 효력을 상실합니다.브라우저는 maxAge가 양수인 쿠키를 해당 쿠키 파일에 영구화합니다.고객이 브라우저를 닫든 컴퓨터를 닫든 maxAge 초 전까지만 해도 사이트에 로그인할 때 이 쿠키는 유효합니다.아래 코드의 쿠키 정보는 영원히 유효합니다.
1 Cookie cookie = new Cookie("username","helloweenvsfei");// Cookie
2 cookie.setMaxAge(Integer.MAX_VALUE);// MAX_VALUE
3 response.addCookie(cookie);// 

maxAge가 음수이면 이 쿠키는 브라우저 창과 이 창이 열린 하위 창에서만 유효하며, 창을 닫으면 이 쿠키가 효력을 상실합니다.maxAge가 음수인 쿠키, 임시 쿠키, 쿠키 정보가 브라우저 메모리에 저장되어 브라우저를 닫으면 쿠키가 사라집니다.Cookie 기본 maxAge 값은 -1입니다.
maxAge가 0이면 쿠키를 삭제합니다.쿠키 메커니즘은 쿠키를 삭제하는 방법을 제공하지 않기 때문에 이 쿠키를 설정하면 즉시 효력을 상실하여 쿠키를 삭제하는 효과를 실현한다.비활성화된 쿠키는 브라우저에서 쿠키 파일이나 메모리에서 삭제됩니다.
예:
1 Cookie cookie = new Cookie("username","helloweenvsfei");// Cookie
2 cookie.setMaxAge(0);// 0, cookie
3 response.addCookie(cookie);// 

쿠키 구성 부분.
쿠키는 HTTP의 헤더 정보에 있습니다.
표준 형식: Set-Cookie:NAME=VALUE;Expires=DATE; Path=PATH; Domain=DOMAIN_NAME; SECURE;
예를 들어 설명: Set-Cookie: JSESSIONID=mysession;Expires=Thu; 05-Jun-20 08 05:02:50 GMT; Path=/web;
쿠키의 Expires 속성은 쿠키의 유효 시간을 표시하고 쿠키의 유효 시간이 지나면 자동으로 삭제됩니다.만료 시간을 설정하지 않으면 이 쿠키의 생명이 브라우저 세션 기간임을 나타냅니다. 브라우저 창을 닫으면 쿠키가 사라집니다.이런 생명주기가 브라우저 세션 기간인 쿠키는 세션 쿠키(임시 쿠키)라고 불리며 세션 쿠키는 메모리에 저장된다.만료 시간을 설정하면 브라우저는 쿠키를 하드디스크에 저장하고 닫은 후에 다시 브라우저를 엽니다. 이 쿠키는 설정된 만료 시간을 초과할 때까지 유효합니다.하드디스크에 저장된 쿠키는 두 개의 IE 창과 같은 서로 다른 브라우저 프로세스 간에 공유할 수 있다.
쿠키가 브라우저에서 비활성화되면 어떻게 합니까?
쿠키는 인위적으로 금지될 수 있으며, 쿠키가 금지되었을 때session id를 서버에 전달할 수 있도록 다른 메커니즘이 있어야 합니다.
[1] URL을 다시 쓰는 것은 바로 session id를 URL 경로의 뒤에 직접 추가하는 것이다. 즉, 우리가 자주 보는 JSP 사이트에aaa가 있을 것이다.jsp?JSESSIONID=* 와 같습니다.
[2] 웹 폼에 숨겨진 영역을 추가한다. 이런 방식은 실제적으로 두 번째 방식과 같다. 전자는 GET 방법으로 데이터를 보내고 후자는 POST 방식으로 데이터를 보낸다.하지만 후자는 비교적 번거롭다.
바로 서버가 자동으로 폼을 수정하고 숨겨진 필드를 추가합니다. 폼을 제출할 때session id를 서버로 전달할 수 있습니다.예:
1 <form name="testform" action="/xxx">
2 <input type="hidden" name="jsessionid"
3 value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBug!-145788764">
4 <input type="text">
5 form>

 
쿠키와 세션의 차이
1. 쿠키 데이터는 클라이언트에 저장되어 사용자 정보를 기록하는 데 사용되며,session 데이터는 서버에 놓는다.
2. 쿠키가 클라이언트에 저장되어 있기 때문에 클라이언트에 대해 볼 수 있다. 클라이언트의 일부 프로그램은 쿠키의 내용을 엿보고 복사하거나 수정할 수 있다.Session은 서버에 저장되어 클라이언트에게 투명하고 민감한 정보 유출의 위험이 없습니다.
쿠키를 선택하면 가장 좋은 방법은 계정 비밀번호 등 민감한 정보를 쿠키에 쓰지 않는 것이다.가장 좋은 것은 Google, Baidu처럼 쿠키 정보를 암호화하여 서버에 제출한 후 복호화하는 것이다. 쿠키의 정보는 자신만이 읽을 수 있도록 보장하는 것이다.Session을 선택하면 훨씬 쉬워집니다. 서버에 두는 것이기 때문에 Session의 어떤 프라이버시도 가능합니다.
3. Session은 서버에 저장되어 있으며 사용자마다 Session이 생성됩니다.병렬 액세스하는 사용자가 매우 많으면 세션이 많이 발생하고 서버 메모리가 많이 소모됩니다.따라서 Google, Baidu와 같이 동시 방문량이 매우 높은 사이트는 Session을 사용하여 고객의 세션을 추적할 수 없다.
쿠키는 서버 자원을 차지하지 않고 클라이언트에 저장됩니다.만약 동시 조회하는 사용자가 매우 많다면 쿠키는 좋은 선택이다.
4. 쿠키의 용량과 개수는 모두 제한되어 있다.단일 쿠키의 용량은 4KB를 초과할 수 없습니다. 많은 브라우저는 한 사이트에 최대 20개의 쿠키를 저장할 수 있도록 제한하지만session은 이 문제가 없습니다.
5. 따라서 SESSION에 로그인 정보 등 중요한 정보를 저장하고 다른 정보는 보존해야 할 경우 COOKIE에 보관하는 것이 좋습니다.
Session과 Cache의 차이점
Session 은 사용자 세션 상태입니다.사용자가 웹 사이트를 방문할 때 SESSIONID가 생성됩니다.COOKIES에 있습니다.서버에 요청할 때마다 이 쿠키를 보내고 서버에서 이 SESSIONID에 저장된 데이터가 있는지 검색합니다.cache는 서버 측의 캐시로 모든 사용자가 접근하고 공유할 수 있습니다.Cache에서 데이터를 읽는 것이 비교적 빠르기 때문에 일부 시스템(사이트)은 자주 사용되는 데이터를 Cache에 넣어 방문 속도를 높이고 시스템 성능을 최적화시킨다.
만약 수천 개의 세션이 있다면, 어떻게 효율을 높일 수 있습니까?(session 접근량이 비교적 많을 때 어떻게 해결합니까?)
세션을redis나memcache 등 메모리 캐시에 넣거나 세션을 SSD 하드디스크에 저장합니다.

좋은 웹페이지 즐겨찾기