也许这是一个愚蠢的问题,但我想存储相同的网址,但不同的用户名饼干。如何使用NSHTTPCookieStorage实现这一点?我就是这样从响应中存储曲奇的。
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSDictionary *headerFields = [httpResponse allHeaderFields];
NSArray* cookies = [NSHTTPCookie
cookiesWithResponseHeaderFields:headerFields
forURL:[NSURL URLWithString:@""]];
for (NSHTTPCookie *cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}
NSString *urlString = ...;
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:cookies forURL:[NSURL URLWithString:urlString] mainDocumentURL:nil];发布于 2016-06-04 04:06:41
如果我正确地理解了您,您希望为不同的用户提供一组单独的cookie。如果是这样的话,那么你应该:
sharedHTTPCookieStorage对象。如果我误解了您,并且您想要将一个特定的cookie存储在共享cookie存储之外,原因如下:
当然,这都假定为NSURLSession。我不认为有一种方法可以用NSURLConnection控制cookie存储。所有cookie都存储在cookie jar中,句号是AFAIK。
发布于 2018-08-27 17:31:07
您可以使用sharedCookieStorage(forGroupContainerIdentifier:)为同一个URL拥有单独的cookie存储(即多个用户)。
您可以使用该方法获得通用cookie存储,并在URLSession中使用它。
示例:
NSHTTPCookieStorage用于相同的URL但不同的用户
let configuration = URLSessionConfiguration.default.copy() as! URLSessionConfiguration
configuration.httpCookieStorage = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: UUID().uuidString)
configuration.httpCookieStorage?.cookieAcceptPolicy = .always
let sessionForCurrentUser = URLSession(configuration: configuration)
let task = sessionForCurrentUser.dataTask(with: URL(string: "https://foo.com/feature")!)
// ...因此,如果您想支持多个用户,那么为每个用户创建一个公共的组标识符。
如果应用程序从来宾用户开始,那么当用户登录时,您需要“升级”cookie存储。类似于:
// Upgrade from Guest user to Paid user
let guestCookieStorage = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: guestId)
let userCookieStorage = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: user.uniqueIdentifier)
for cookie in guestCookieStorage.cookies ?? [] {
userCookieStorage.setCookie(cookie)
}发布于 2019-03-05 10:53:10
@interface NSHTTPCookieStorage (ApplePrivateHeader)
-(id)_initWithIdentifier:(id)arg1 private:(BOOL)arg2;
@end
@interface User()
@property (nonatomic, strong) NSHTTPCookieStorage *myHTTPCookieStorage;
@end
@implementation User
-(instancetype)init
{
self = [super init];
if (self) {
//the [NSHTTPCookieStorage init] will generate a instance with no inner `NSHTTPCookieStorageInternal`, so.
_myHTTPCookieStorage = [[NSHTTPCookieStorage alloc] _initWithIdentifier: @"user_id_xxx" private:0];
_myHTTPCookieStorage.cookieAcceptPolicy = NSHTTPCookieAcceptPolicyAlways;
}
return self;
}
-(void)httpTask{
NSURLSessionConfiguration *c =[NSURLSessionConfiguration ephemeralSessionConfiguration];
c.HTTPCookieStorage = _myHTTPCookieStorage;
[[[NSURLSession sessionWithConfiguration: c] dataTaskWithRequest:request completionHandler:nil] resume];
}
// load from file
-(void)(id)initWithCoder:(NSCoder *)aDecoder{
NSArray<NSHTTPCookie*> *cookies = [aDecoder decodeObjectForKey:@"cookies"];
for (NSHTTPCookie *cookie in cookies) {
[_myHTTPCookieStorage setCookie: cookie];
}
}
//save to file
- (void)encodeWithCoder:(NSCoder *)aCoder
[aCoder encodeObject:_myHTTPCookieStorage.cookies forKey: @"cookies"];
}
@endhttps://stackoverflow.com/questions/37597250
复制相似问题