2013-09-01 14 views
10

Ai đó có thể vui lòng cho tôi biết cách lưu cookie KHÔNG BAO GIỜ bằng cách sử dụng AFNetworking cho iOS không? Tôi đang sử dụng ios7 nhưng tôi nghĩ rằng điều này không quan trọng?Làm thế nào để sử dụng AFNetworking để lưu cookie mãi mãi, cho đến khi ứng dụng bị xóa khỏi iPhone?

Trường hợp sử dụng là khi xác thực thành công với dịch vụ web, nó cung cấp cho tôi hai cookie mà tôi cần phải chuyển cùng với mọi yêu cầu. Các cookie này không bao giờ hết hạn hoặc hết hạn trong nhiều năm kể từ bây giờ. Miễn là tôi có cookie với mỗi yêu cầu HTTPS, người dùng không phải đăng nhập lại. Tôi hiểu rằng AFNetworking sẽ tự động lưu giữ cookie cho đến khi bạn thoát khỏi ứng dụng, nhưng tôi cần các cookie để tồn tại mãi mãi cho đến khi người dùng xóa ứng dụng khỏi điện thoại của họ.

1) Khi xác thực thành công, webservice đưa cho tôi hai cookie. Làm cách nào để truy cập chúng? Tôi có đi thẳng đến kho lưu trữ NSHTTPCookie và lấy cookie theo tên của nó hay là có cách "AFNetworking" để thực hiện việc này không?

2) Làm cách nào để lưu hai cookie ma thuật này vĩnh viễn để lớp con của AFHTTPClient chuyển hai cookie ma thuật này cùng với mỗi yêu cầu? Tôi chỉ cần lưu chúng bên trong một keychain hoặc NSUserDefaults hoặc NSURLCredentialsStorage? Hoặc một lần nữa là có một cách AFNetworking để làm điều này? Tôi đọc về một phương thức setAuthorization() bên trong AFNetworking nhưng tôi cũng không chắc chắn nếu điều này cũng áp dụng cho tên người dùng/mật khẩu và cookie.

3) Làm cách nào để xóa các cookie này theo cách AFNetworking?

Cảm ơn !!

Trả lời

18

AFNetworking không thực hiện bất kỳ điều gì một cách rõ ràng với cookie nên không có cách "AFNetworking" để xử lý cookie. Bạn sẽ làm việc với NSHTTPCookie và NSHTTPCookieStorage.

Trong các dự án của tôi, tôi không cần phải làm bất cứ điều gì cụ thể cho các yêu cầu để họ làm việc với cookie. Nếu bạn cần hành vi yêu cầu khác với AFNetworking cung cấp theo mặc định, bạn ghi đè requestWithMethod:path:parameters: trong lớp con AFHTTPClient của mình.

  1. Để có được các tập tin cookie trở về từ một AFJSONRequest, ví dụ

    NSURLRequest* request = <some request returned from your AFHTTPClient subclass> 
    AFJSONRequestOperation* op = [AFJSONRequestOperation JSONRequestOperationWithRequest:request 
    success:^(NSURLRequest* request, NSHTTPURLResponse* response, id userData) { 
        NSArray* cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:url]; 
    } 
    failure:... 
    
  2. This answer nói để thiết lập ngày hết hạn trên cookie. Nếu bạn muốn tự mình lưu giữ các cookie, bạn có thể chuyển đổi cookie thành một từ điển và lưu lại. This answer nói để sử dụng móc khóa.

    NSMutableDictionary* cookieDictionary = [NSMutableDictionary dictionaryWithDictionary:cookiePrefs]; 
    for (NSHTTPCookie* cookie in cookies) { 
        [cookieDictionary setValue:cookie.properties forKey:cookie.name]; 
    } 
    
  3. Xóa cookie khỏi NSHTTPCookieStorage. Có một số trickiness để xem. Nếu bạn đã tự lưu các tập tin cookie, xóa các giá trị được lưu trữ tuy nhiên là thích hợp.

    NSArray* cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:theUrl]; 
    for (NSHTTPCookie* cookie in cookies) { 
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; 
    } 
    
Các vấn đề liên quan