ios - 是否接受 UIWebView 中的 cookie?

标签 ios objective-c iphone cookies uiwebview

我不得不为你提问。

1:我在我的 iPhone 应用程序中使用 UIWebView。我不希望用户能够在新闻中添加评论。但是,要发表评论,他们必须先登录。

如果没有,我如何在 UIWebView 中接受 cookie?

2 : 在 UIWebView 中创建的 cookie 在其他 UIWebView 中是否可用在其他 View 中?

例如:我有我的 LoginViewController,带有一个嵌入式 UIWebView,我的用户可以在其中登录/注销。如果他们在此 View 中登录,cookie 仍将在 CommentViewController 中可用?

如果没有,我怎样才能使这成为可能?

提前致谢!

最佳答案

UIWebView 将自动将 cookie 存储在 [NSHTTPCookieStorage sharedHTTPCookieStorage] 集合中,并且应该在您的所有其他 UIWebView 中可用应用程序,在同一应用程序启动期间。但是,UIWebView 类不会自动存储在应用程序启动之间加载的页面的 cookie。您需要在应用移至后台时手动存储 cookie,并在应用返回前台时重新加载值。

将以下代码放在您的 AppDelegate 类中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //Other existing code

    [self loadHTTPCookies];
    return YES;
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    //Other existing code

    [self saveHTTPCookies];
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [self loadHTTPCookies];
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    //Other existing code
    [self saveHTTPCookies];
}

-(void)loadHTTPCookies
{
    NSMutableArray* cookieDictionary = [[NSUserDefaults standardUserDefaults] valueForKey:@"cookieArray"];

    for (int i=0; i < cookieDictionary.count; i++)
    {
        NSMutableDictionary* cookieDictionary1 = [[NSUserDefaults standardUserDefaults] valueForKey:[cookieDictionary objectAtIndex:i]];
        NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieDictionary1];
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
    }
}

-(void)saveHTTPCookies
{
    NSMutableArray *cookieArray = [[NSMutableArray alloc] init];
    for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
        [cookieArray addObject:cookie.name];
        NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
        [cookieProperties setObject:cookie.name forKey:NSHTTPCookieName];
        [cookieProperties setObject:cookie.value forKey:NSHTTPCookieValue];
        [cookieProperties setObject:cookie.domain forKey:NSHTTPCookieDomain];
        [cookieProperties setObject:cookie.path forKey:NSHTTPCookiePath];
        [cookieProperties setObject:[NSNumber numberWithUnsignedInteger:cookie.version] forKey:NSHTTPCookieVersion];
        [cookieProperties setObject:[[NSDate date] dateByAddingTimeInterval:2629743] forKey:NSHTTPCookieExpires];

        [[NSUserDefaults standardUserDefaults] setValue:cookieProperties forKey:cookie.name];
        [[NSUserDefaults standardUserDefaults] synchronize];

    }

    [[NSUserDefaults standardUserDefaults] setValue:cookieArray forKey:@"cookieArray"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

关于ios - 是否接受 UIWebView 中的 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26005641/

相关文章:

ios - 将视频 URL 保存到 Core Data

ios - 下推视频和控件的导航栏

ios - 为什么每次点击 UITextField 时都会调用 viewDidLayoutSubviews

ios - Objective-C 中的发布问题

objective-c - TextView 中选定字符串的行号

objective-c - 用于计算平均标准偏差的 Arm 循环代码优化

iOS Swift 全局存储简单数据

iphone - NSInvalidArgumentException',原因 : 'Unknown predicate type for predicate: BLOCKPREDICATE(0x70ad750)' Error

iphone - 从另一个应用程序(如电子邮件/网络浏览器)启动 iPad 应用程序

iphone - 框架选型如何?