쿠키에 대한 지식의 총결

10969 단어 지식.Cookie
쿠키 유형
세션 쿠키와 지속 쿠키
세션 쿠키는 사용자가 사이트를 방문할 때의 설정과 선호도를 기록하고 사용자가 브라우저를 종료할 때 세션 쿠키가 삭제됩니다.
지속적인 쿠키는 사용자의 하드디스크에 저장되며 브라우저가 종료되거나 컴퓨터가 다시 시작될 때 존재합니다.
세션 쿠키와 지속 쿠키 사이의 유일한 차이는 만료 시간이다.
Discard 매개 변수(cookie 버전 1의 매개 변수)가 설정되어 있거나 Expires나 Max-Age 매개 변수(cookie 버전 1의 매개 변수)가 설정되어 있지 않으면 이 쿠키는 세션 쿠키입니다.
쿠키가 어떻게 일하는지
쿠키는 서버가 사용자에게 붙이는 라벨과 같은 설정을 통해 사용자의 상태를 추적할 수 있다.
서버에서 설정한 쿠키 정보를 응답 헤더를 통해 브라우저에 되돌려줍니다. 브라우저는 응답 헤더의 쿠키 정보를 로컬에 저장하고 다음에 서버에 HTTP 요청을 보낼 때 저장된 쿠키 정보를 자동으로 요청 헤더에 추가합니다(document.cookie 인터페이스를 통해 설정된 쿠키 포함).
다음은 블로그 로그아웃 로그인 시 응답 헤더와 요청 헤더입니다. 응답 헤더에는 Set-Cookie 필드가 있고 요청 헤더에는 쿠키 필드가 있습니다.
BOM에서 제공하는 문서.쿠키 인터페이스는 앞에서 쿠키를 조작할 수 있다(증가, 삭제, 수정). 본질적으로 일정한 규칙에 부합되는 문자열을 조작한다. 그러면 개발자는 쿠키를 이용하여 로컬에 데이터를 저장할 수 있다.물론 민감하지 않은 정보를 저장하는 것이 좋다.
쿠키의 제한 및 구성
쿠키의 한계
쿠키의 제한은 크게 두 가지입니다.
  • 쿠키에 접근할 때의 동원 제한
  • 쿠키의 개수 및 크기 제한
  • 동원 제한
    쿠키는 특성상 특정 도메인 이름 아래에 묶여 있습니다.쿠키를 만든 후에 도메인 이름을 만들고 요청을 보낼 때 요청 헤더에 이 쿠키가 포함되어 있습니다.이 제한은 쿠키에 저장된 정보는 승인된 필드만 접근할 수 있고 다른 필드는 접근할 수 없습니다.
    개수 및 치수 제한
    모든 도메인 이름 아래에 귀속할 수 있는 쿠키의 개수는 유한하고 브라우저마다 제한된 개수는 다르다.
    브라우저의 동일 도메인 이름 아래 쿠키 수 제한은 다음 표를 참조하십시오.
    브라우저
    바인딩 가능한 쿠키 개수
    IE6
    20
    IE7
    50
    Firefox
    50
    Opera
    30
    Safari
    단단한 제한이 없다
    Chrome
    단단한 제한이 없다
    단일 도메인 이름 제한을 초과한 후에 쿠키를 다시 설정하면 브라우저는 이전에 설정한 쿠키를 삭제합니다.
    브라우저에서는 단일 쿠키의 크기도 4MB로 제한됩니다.사이즈 제한은 하나의 도메인 이름 아래의 모든 쿠키에 영향을 줍니다. 모든 쿠키가 단독으로 제한된 것이 아닙니다.
    쿠키의 구성
    이름 및 값name = value: 필수 항목입니다.두 인용부호에 포함되지 않으면, 쉼표, 등호, 빈칸이 포함되지 않습니다.웹 서버는 임의의name=value 연결을 만들 수 있으며, 브라우저는 다음 사이트에 대한 접근에서 웹 서버에 전송됩니다.
    도메인domain: 선택 사항입니다.이 쿠키가 어느 영역에 유효한지 표시합니다.이 필드에 보내는 모든 요청에는 이 쿠키 정보가 포함되어 있습니다.이 값은 하위 도메인(예를 들어 www.wrox.com, 이 쿠키 정보는 이 도메인 이름으로만 발송됨)을 포함할 수도 있고, 포함하지 않을 수도 있다(예를 들어.wrox.com은 wrox.com의 모든 하위 도메인에 유효하다).만약 명확한 규정이 없다면, 이 필드는 이 쿠키를 설정한 서버가 있는 필드로 인정됩니다.
    경로 path: 선택 사항입니다.이 필드를 통해 서버에 있는 특정한 문서에 쿠키를 분배할 수 있습니다.path 필드가 URL 경로 접두사라면 쿠키를 추가할 수 있습니다.예를 들어 경로/foo와/foobar 및/foo/bar.html 일치.경로/도메인 이름의 모든 내용과 일치합니다.기본값은 쿠키를 설정할 때 현재 디렉토리입니다.
    실효 시간expires (새 쿠키 규범은 max-age 필드): 선택할 수 있습니다.이 필드는 쿠키의 실제 생존 기간을 정의하는 날짜 문자열을 지정합니다.이 날짜가 되면 이 쿠키를 저장하거나 발표하지 않고 이 쿠키는 삭제됩니다.설정한 날짜가 이전 시간이면 쿠키는 즉시 삭제됩니다.
    날짜 형식은 GMT 형식: Wdy, DD-Mon-YYYYY H:MM:SS GMT입니다.
    보안 플래그 secure: 선택 사항.이 필드는 키 값이 맞는 형식이 아닙니다. 이 필드를 지정하려면 쿠키를 설정할 때secure 문자를 추가하면 됩니다.이 필드를 설정하면 SSL 연결을 사용할 때만 서버에 쿠키가 전송됩니다.예: 도메인을 www.wrox로 지정합니다.com의 쿠키, secure 필드가 정해진 후 이 쿠키는https://www.wrox.com보내다http://www.wrox.com의 요청이 쿠키를 추가하지 않습니다.
    HTTP 전용 HttpOnly: 선택 사항입니다.이 필드는 서버에서만 설정할 수 있으며 쿠키가 JS(BOM의 document.cookie 인터페이스)를 통해 접근할 수 있는지 여부를 나타냅니다.기본적으로 HttpOnly 필드는 비어 있으며 JS를 통해 쿠키에 액세스할 수 있음을 나타냅니다.
    규범에 따라 개발자는 JS를 이용하여 전방에서 쿠키의 HttpOnly 필드를 수정할 수 없다. 그러나 일부 브라우저는 이런 제한이 없다. 구체적으로 이 글을 보면 브라우저에서 쿠키의 HttpOnly 로고 설정으로 인한 안전 문제
    서버에서 이 필드를 설정하는 방법에 관해서는 이 글을 보십시오: 쿠키 보안 설정에 관한 것들
    주의: 필드, 경로, 실효 시간, 보안 표지 (secure) 와 Http Only 필드는 모두 서버가 브라우저에게 어떻게 쿠키를 저장하고 발송하는지 알려주는 것입니다. 이 매개 변수는 서버에 보내는 쿠키 정보의 일부분이 아니라 쿠키의 이름 값 쌍 (name=value) 만 발송됩니다.
    앞의 그림에서 응답 헤더의 Set-Cookie는 하나의 쿠키를 대표한다.요청 헤더의 쿠키 필드에는 하나의 쿠키만 포함하는 이름 쌍이 아니라 여러 쿠키의 이름 쌍이 포함될 수 있습니다.
    BOM의 문서.쿠키 커넥터
    쿠키를 가져올 때, 문서.쿠키는 현재 페이지에서 사용할 수 있는 모든 쿠키의 문자열을 되돌려줍니다. 번호별로 구분된 일련의 이름값 쌍입니다.
    예를 들어, Chrome에서 이 페이지를 엽니다.https://segmentfault.com/a/1190000004556040콘솔에 다음 코드를 입력합니다.
    console.log(document.cookie);

    콘솔에서 다음 결과가 출력됩니다.
    PHPSESSID=web2~f57e474e4a8mc396h4du05qsa0;
    Hm_lvt_e23800c454aa573c0ccb16b52665ac26=1495500966; 
    Hm_lpvt_e23800c454aa573c0ccb16b52665ac26=1495500966;
    _ga=GA1.2.1399344530.1495500966; 
    _gid=GA1.2.584865054.1495500966; 
    showRegister2=; 
    showRegister=

    일곱 개의 번호로 구분된 이름 값 쌍은 일곱 개의 쿠키가 사용할 수 있음을 나타낸다. (모든 이름과 값은 URL 인코딩을 거쳤기 때문에 decode URI Component () 를 사용하여 디코딩해야 한다.
    개발자 도구의 Application 옵션을 클릭하고 왼쪽에서 쿠키 밑에 있는 메뉴를 찾으며 첫 번째 도메인 이름을 클릭하면 이 7개의 쿠키에 대한 상세한 정보를 볼 수 있습니다.구체적으로 다음과 같다.
    쿠키를 설정할 때 문서.쿠키는 새로운 쿠키 문자열을 설정할 수 있습니다. 이 쿠키 문자열은 현재 기존 쿠키 집합에 해석되고 추가됩니다.이 중 이름 값 쌍 (name=value) 은 필수입니다. (encodeURIComponent ()로name와value를 인코딩하는 것이 좋습니다.) 다른 필드는 쿠키의 구성 부분에서 설명했습니다.
    문서를 통해.쿠키 설정의 쿠키는 기존 쿠키를 덮어쓰지 않습니다. 설정된 쿠키의name이 기존 쿠키 집합에 존재하지 않고 path/domain/secure 이 몇 가지 옵션은 반드시 이전 쿠키와 동일해야 합니다.그렇지 않으면 이전 쿠키가 수정되지 않고 새 쿠키가 추가됩니다.
    예(wamp 환경 사용):
    PHP 코드:

    HTML 코드:

    JS 코드:
    function myAJAX(url) {    var xhr  = new XMLHttpRequest();
        xhr.onreadystatechange = function() {        if(xhr.readyState === 4) {            if((xhr.status >= 200 && xhr.status  
      

      , cookie , , Application cookie 。

    , Network :

    Application cookies cookie:

      cookie :

    , cookie 。

    cookie , cookie, cookie :

    cookie ok。

    , :

    Cookie cookie ,cookie ok。 Set-Cookie cookie ( ,cookie test)( , 。)。

    cookie 。 , (path)、 (domain) (secure) cookie,

     

    document.cookie cookie 。

    , document.cookie cookie:

    document.cookie = encodeURIComponent(“username”) + “=” +encodeURIComponent(“jack”) + “; domain=.wrox.com; path=/”;

    하위 쿠키
    하위 쿠키는 단일 쿠키에 저장된 더 작은 데이터입니다.즉 쿠키 값을 사용하여 여러 개의 이름 값 쌍을 저장하는 것이다.
    피드 쿠키 형식:
    name=name1=value1&name2=value2&name3=value3&name4=value4

    본질적으로 문자열의 조작입니다.
    CORS의 쿠키
    (완일봉 선생님의 글에서 발췌한 것: 전역 자원 공유 CORS 상해)
    CORS 요청은 기본적으로 쿠키 및 HTTP 인증 정보를 보내지 않습니다.Cookie를 서버에 보내려면 Access-Control-Allow-Credentials 필드를true로 지정해야 합니다.다른 한편, 개발자는 AJAX 요청에서 XMLHttpRequest 대상의 withCredentials 속성을 열어야 한다.그렇지 않으면 서버가 쿠키 전송에 동의해도 브라우저가 전송하지 않습니다.또는 서버에서 쿠키 설정을 요청해도 브라우저에서 처리하지 않습니다.
    하지만 withCredentials 설정을 생략하면 쿠키를 함께 보내는 브라우저도 있습니다.이 경우 withCredentials를 명시적으로 닫을 수 있습니다.
    주의해야 할 것은 쿠키를 보내려면 Access-Control-Allow-Origin이 별표로 설정할 수 없으며 요청한 웹 페이지와 일치하는 명확한 도메인 이름을 지정해야 한다는 것이다.또한 쿠키는 서버 도메인으로 설정된 쿠키만 업로드할 수 있고 다른 도메인의 쿠키는 업로드되지 않으며 원본 웹 코드의 document도 업로드되지 않습니다.쿠키도 서버 도메인 이름 아래의 쿠키를 읽을 수 없습니다.

    좋은 웹페이지 즐겨찾기