Не удалось создать cookie с помощью "NSHTTPCookie cookieWithProperties"
Я использую следующий код для создания куки, но не удалось.(IOS SDK 5)
// add cookie
NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
req.URL, NSHTTPCookieOriginURL,
@"MLSTORAGE", NSHTTPCookieName,
@"1234567890", NSHTTPCookieValue,
nil];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties];
NSLog(@"\nurl: %@\ncookie: %@", req.URL, cookie);
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
//
журнал это:
2012-07-26 18:30:49.914 Motilink[15289:707] -[FMWebDAVRequest sendRequest:][Line 154]
url: http://210.116.114.195:8080/MLServer/storage/
cookie: (null)
Кто-нибудь знает, как создать печенье?
4 ответа
Кажется, что есть проблема при использовании NSHTTPCookieOriginURL
с URL вашего запроса.
Попробуйте использовать этот код, он работает для меня:
// add cookie
NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
req.URL.host, NSHTTPCookieDomain,
req.URL.path, NSHTTPCookiePath,
@"MLSTORAGE", NSHTTPCookieName,
@"1234567890", NSHTTPCookieValue,
nil];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties];
NSLog(@"\nurl: %@\ncookie: %@", req.URL, cookie);
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
//
Однако я не знаю почему NSHTTPCookieOriginURL
здесь не работает
Надеюсь это поможет,
Я встречал тот же вопрос. Когда я посмотрел документацию и обнаружил, что для свойств требуются только "name", "value" и "originURL" или "domain", я попытался, но не получилось. После того, как я добавил "путь", и это сработало. Потому что я точно не понял, что если вы просто предоставляете "домен", отличный от "originURL", то также требуется "путь".
<tr>
<th>Property key constant</th>
<th>Type of value</th>
<th>Required</th>
<th>Description</th>
</tr>
<tr>
<td>NSHTTPCookieName</td>
<td>NSString</td>
<td>YES</td>
<td>Name of the cookie</td>
</tr>
<tr>
<td>NSHTTPCookieValue</td>
<td>NSString</td>
<td>YES</td>
<td>Value of the cookie</td>
</tr>
<tr>
<td>NSHTTPCookieDomain</td>
<td>NSString</td>
<td>Special, a value for either NSHTTPCookieOriginURL or
NSHTTPCookieDomain must be specified.</td>
<td>Domain for the cookie. Inferred from the value for
NSHTTPCookieOriginURL if not provided.</td>
</tr>
<tr>
<td>NSHTTPCookieOriginURL</td>
<td>NSURL or NSString</td>
<td>Special, a value for either NSHTTPCookieOriginURL or
NSHTTPCookieDomain must be specified.</td>
<td>URL that set this cookie. Used as default for other fields
as noted.</td>
</tr>
<tr>
<td>NSHTTPCookiePath</td>
<td>NSString</td>
<td>NO</td>
<td>Path for the cookie. Inferred from the value for
NSHTTPCookieOriginURL if not provided. Default is "/".</td>
</tr>
Окончательный код ниже:
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
[cookieProperties setObject:@"SESSION" forKey:NSHTTPCookieName];
[cookieProperties setObject:@"value" forKey:NSHTTPCookieValue];
[cookieProperties setObject:@".domain.com" forKey:NSHTTPCookieDomain];
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
NSHTTPCookie *co = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:co];
Чтобы успешно создать файл cookie, необходимо указать значения (как минимум) ключей NSHTTPCookiePath, NSHTTPCookieName и NSHTTPCookieValue, а также ключа NSHTTPCookieOriginURL или ключа NSHTTPCookieDomain.
Это может быть полезно для установки массива файлов cookie в NSHTTPCookieStorage. Я столкнулся с этой проблемой, и я решил с помощью кода ниже. Надеюсь, это будет полезно для тех, кто пытается установить массив файлов cookie.
NSDictionary *cookieProperties = [NSDictionary dictionaryWithObjectsAndKeys:
@".domain.com", NSHTTPCookieDomain,
@"/", NSHTTPCookiePath,
@"SESSION", NSHTTPCookieName,
@"Session value",NSHTTPCookieValue,nil];
NSDictionary *cookieProperties1 = [NSDictionary dictionaryWithObjectsAndKeys:
@".domain.com", NSHTTPCookieDomain,
@"/", NSHTTPCookiePath,
@"some cookie", NSHTTPCookieName,
@"some cookie value",NSHTTPCookieValue,nil];
NSHTTPCookie *cookie1 = [NSHTTPCookie cookieWithProperties:cookieProperties1];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
NSArray* cookieArray = [NSArray arrayWithObjects: cookie,cookie1, nil];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:cookieArray forURL:[NSURL URLWithString:urlString] mainDocumentURL:nil];
Вы можете перепроверить ваши куки, используя код ниже.
[[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"Printing cookies %@", obj);
}];