我在iOS应用程序中有Web视图,需要对身份验证cookie进行适当的身份验证.我正在寻找一种在iOS应用程序的webview中设置cookie的方法,而不必发出设置cookie的出站请求,因为我已经在客户端上有auth信息.
这篇文章向我们展示了UIWebView cookie的存储位置.
现在我正在加载一个隐藏的Web视图来发出一个出站请求,但是我不想做一个外部请求来设置一个简单的cookie.
苦苦于解决这个问题并且不愿实施自定义cookie管理系统.
看来iOS的一些隐藏级别的HTTP实现无法正确管理无会话cookie.每当HTTP响应设置或删除cookie时,立即检查NSHTTPCookieStorage cookie将产生预期结果并指示正确的sessionOnly值.
但是,如果应用程序在响应更新cookie后立即退出,则重新启动时,这些sessionOnly = FALSE cookie将恢复为某个先前状态,并且最新更新将丢失.
是否通过响应头或NSHTTPCookieStorage setCookie设置/删除cookie:没有区别.
一些缓存/同步伏都教必须在幕后进行.cookie变为持久化所需的时间最长可达5秒.
在那里有谁或者可以指出这种行为的明确解释?这是一个简单明了的bug吗?还是一些我无法理解的无证特征?
您可以使用一些代码重现:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
NSHTTPCookie *cookie;
for (cookie in [NSHTTPCookieStorage sharedHTTPCookieStorage].cookies) {
NSLog(@"%@=%@", cookie.name, cookie.value);
}
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
[cookieProperties setObject:@"testCookie" forKey:NSHTTPCookieName];
[cookieProperties setObject:[NSString stringWithFormat:@"%f", [[NSDate date] timeIntervalSince1970]] forKey:NSHTTPCookieValue];
[cookieProperties setObject:@"www.example.com" forKey:NSHTTPCookieDomain];
[cookieProperties setObject:@"www.example.com" forKey:NSHTTPCookieOriginURL];
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];
// set expiration to one month from now
[cookieProperties setObject:[[NSDate date] dateByAddingTimeInterval:2629743] forKey:NSHTTPCookieExpires];
cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}
Run Code Online (Sandbox Code Playgroud)
此代码应在每次启动时输出新值.相反,您会看到如果您快速退出应用程序,则值将保持不变. …
我在我的应用程序中使用UIWebView.我想在第一个webview上加载一个URL,该用户可以登录他的帐户.登录后,用户退出了webview并在iOS原生视图中执行其他操作.后来当他拨打相同的URL时,他必须登录.怎么可能?当我在一个标签中登录我的帐户时,我在Gmail中看到了这一点,并关闭它,每当我打开任何标签时,我的GMAIl帐户都会记录在Safari中.
我在下面尝试了一些东西,但没有工作.请建议我一个解决方案
-(void)loadCookies
{
NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"cookies"]];
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in cookies)
{
[cookieStorage setCookie: cookie];
}
}
-(void)saveCookies
{
NSData *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject: cookiesData forKey: @"cookies"];
[defaults synchronize];
}
Run Code Online (Sandbox Code Playgroud)
我的应用流程如下所示.
1.在UIWebview上调用URL - http://www.userlogin.com 2.从该视图控制器中进行操作3.在应用程序中执行其他功能.4.在不同的UIWebView中调用相同的URL - http://www.userlogin.com
在这里,我需要显示他登录的会话.
我正在尝试访问需要cookie的特定URL,UIWebView但由于禁用了cookie,因此无法访问它.所以我做了以下事情:
已启用的Cookie:
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
[cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
Run Code Online (Sandbox Code Playgroud)NSURLConnection从响应中创建和提取cookie:
NSArray *cookies = [ NSHTTPCookie cookiesWithResponseHeaderFields: [ httpResponse allHeaderFields ] forURL:response.URL];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies: cookies forURL: response.URL mainDocumentURL:nil];
Run Code Online (Sandbox Code Playgroud)但这都没有帮助.但是,如果我在safari中启动URL,它会成功加载,之后我也可以加载相同的URL UIWebView.你能帮我解决这个问题,我该如何启用cookie UIWebView?
提前致谢