쿠키가 뭐야?어디서 오셨어요?어디에 존재합니까?어디로 갑니까?

3154 단어
쿠키가 뭐예요?
쿠키의 가장 간단한 소개는 서버가 되돌아오는 문자열 정보입니다. 단지 저희가 요청할 때마다 서버에 보내야 합니다.AFN과android-async-http를 예로 들면 기본적으로 쿠키를 자동으로 저장하고 다음 요청을 보낼 때 쿠키를 서버에 제출합니다.
서버에 쿠키는 언제 제출됩니까?
이 문제는 쿠키의 역할 영역을 알아야 합니다. 쿠키의 효과적인 역할 영역은 현재 파일 디렉터리와 하위 디렉터리입니다.예를 들면 다음과 같습니다.
http://www.xxx.com/love  
//        cookie,  path /love

그러면 프로그램의 생명 기간에 AFN과android-async-http를 통해 모든 /love 디렉터리와 /love/xxx 하위 디렉터리에 접근할 때 프레임워크는 자동으로 쿠키를 서버에 제출합니다.만약 요청이 /love 디렉터리 자체나 하위 디렉터리가 아니라면 프레임워크는 쿠키를 서버에 제출하지 않습니다.만약 이때 우리가 방문http://www.xxx.com/person 인터페이스가 필요할 때도 이전에 되돌아온 쿠키를 가져가면 어떻게 해야 합니까?
되돌아오는 쿠키는 어디에 있습니까?
가장 간단한 방법은 자신이 쿠키의 저장과 발송을 하는 것이다. 서버가 되돌아오는 쿠키는 Response의 헤더에 저장된다. 예를 들어 다음과 같다.
HTTP response Header:
{
    "Content-Type" = "text/html;charset=UTF-8";
    Date = "Thu, 29 Jun 2017 08:50:18 GMT";
    Server = "Apache-Coyote/1.1";
    "Set-Cookie" = "token=a27c5779-3718-4716-bbfa-6a51407c6d70";
    "Transfer-Encoding" = Identity;
}

그 중에서'Set-Cookie'는response의 헤더에서 기본적으로 쿠키를 저장하는 필드입니다. (물론 다른 이름을 지을 수 있지만 일반적인 규범은 이 문자열입니다.)
서버에 제출한 쿠키는 어디에 있습니까?
response의 Header와 마찬가지로 Request의 Header에도 쿠키 문자열을 저장하는 필드가 있습니다. 이 필드는 기본값cookie입니다. 예를 들어 다음과 같습니다.
HTTP request Header:
{
    Cookie = token=c66fbbc7-d799-426e-b065-d23226833dda;
    Content-Type = application/x-www-form-urlencoded; charset=utf-8;
    Device-OS = 10.3;
    version = 1.0.57;
    User-Agent = XProduct/1.0.57 (iPhone; iOS 10.3; Scale/2.00);
    Device-Name = x86_64;
    Accept-Language = zh-Hans-US;q=1, en;q=0.9;
}

구체적으로 어떻게 합니까?
이제 쿠키가 무엇인지, 어디서 왔는지, 어디로 가는지 알게 되면 일은 간단해진다. 그래서 문제의 마지막은 다음과 같다. response 헤더의 키 값을 어떻게 얻고, Request 헤더를 어떻게 설정하는가?물론 iOS든 안드로이드든 상응하는 HTTP 쿠키 프레임워크를 제공한다. 그 다음으로 그 본질은response Header의'Set-Cookie'에서 문자열을 가져와 지정한 쿠키를 Requset의 Header에 저장하는 것이다. 예를 들어 다음과 같다.
//  cookie
NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
//fields          response header   
NSDictionary *fields = [res allHeaderFields];
NSLog(@"fields = %@", [fields description]);
NSArray *cookie = [NSHTTPCookie cookiesWithResponseHeaderFields:fields forURL:request.URL] 

NSHTTPCookie의 클래스 방법은 위의respnse Header의 쿠키 문자열을 하나의 대상으로 나누는 것입니다. 예를 들어 아래가 바로 나누기 결과입니다.


NSHTTP 쿠키를 전혀 사용하지 않아도 됩니다.response Header에서 Set-Cookie 필드에 대응하는 문자열을 얻을 뿐입니다.
Request Header의 프레임워크 API에 쿠키를 설정하는 데 있어서 저는 자세히 보지 않았습니다. 왜냐하면 제가 직접 수동으로 설정하기 때문입니다.
httpRequestSerializer = [AFHTTPRequestSerializer serializer];
//token      , response header 'Set-Cookie'      
[httpRequestSerializer setValue:token forHTTPHeaderField:@"cookie"]

API를 어떻게 사용해서 쿠키를 만드는지에 대해 이 검색을 해 보면 많은 소개가 있다. 본고는 주로 쿠키가 어디서 왔고 존재하는 곳, 어디로 가는지 소개한다.

좋은 웹페이지 즐겨찾기