一个reques是否在头中加入一个cookie,依据的就是请求的url和cookie的domain、path两项都匹配,


 NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
                                @"www.google.com", NSHTTPCookieDomain,
                                @"/abc", NSHTTPCookiePath,  // IMPORTANT!
                                @"testCookies", NSHTTPCookieName,
                                @"1", NSHTTPCookieValue,
                                nil];
    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties];


如上面的cookie,
对www.google.com/abc的请求,这个cookie会附加在请求的头中,

对www.google.com/123的请求,则不会加入。


工作中,登录的url是 www.domain.com/user,

取数据的url是www.domain.com/data.

在登录后,无法取得数据,原来,是登录后,服务端返 回的cookie的path是/user。

这个cookie在/data的请求中是不加入头的,因为服务端不知找谁改,所以只好在客户端修改cookie了:



NSHTTPCookieStorage *sharedHTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
        NSArray *cookies = [sharedHTTPCookieStorage cookiesForURL:[NSURL URLWithString:urlPath]];
        NSEnumerator *enumerator = [cookies objectEnumerator];
        NSHTTPCookie *cookie;
        while (cookie = [enumerator nextObject])
        {
            if ([[cookie name] isEqualToString:@"JSESSIONID"])
            {
                NSMutableDictionary *propscook = [[NSMutableDictionary alloc] initWithDictionary: [cookie properties]];
                
                
                propscook[@"Path"] = @"/";
                
                [sharedHTTPCookieStorage deleteCookie:cookie];
                
                NSHTTPCookie *newcookie = [NSHTTPCookie cookieWithProperties:propscook];
                [sharedHTTPCookieStorage setCookie:newcookie];
                
                break;
            }
        }

更多推荐