如何让UIWebView会话永不过期

Nit*_*ish 2 iphone uiwebview nsurlrequest ios

我想,以节省会议UIWebView在提示如下链接:

- (NSURLRequest*)addCookies:(NSArray *)cookies forRequest:(NSURLRequest *)request
{
    NSMutableURLRequest *mutableRequest = [request mutableCopy];
    if ([cookies count] > 0)
    {
        NSHTTPCookie *cookie;
        NSString *cookieHeader = nil;
        for (cookie in cookies)
        {
            if (!cookieHeader)
            {
                cookieHeader = [NSString stringWithFormat: @"%@=%@",[cookie name],[cookie value]];
            }
            else
            {
                cookieHeader = [NSString stringWithFormat: @"%@; %@=%@",cookieHeader,[cookie name],[cookie value]];
            }
        }
        if (cookieHeader)
        {
            [mutableRequest setValue:cookieHeader forHTTPHeaderField:@"Cookie"];
        }

        return [mutableRequest copy];
    }

    return nil;
}  
Run Code Online (Sandbox Code Playgroud)

并在viewDidLoad:

NSURLRequest *webRequest = [NSURLRequest requestWithURL:homeURL];
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];

NSMutableURLRequest *requestMut = [NSMutableURLRequest requestWithURL:webRequest.URL];
[requestMut setHTTPShouldHandleCookies:YES];
webRequest = [self addCookies:cookies forRequest:requestMut];
[_tgWebView loadRequest:webRequest];  
Run Code Online (Sandbox Code Playgroud)

但是应用程序再次出现在登录屏幕上,即会话未保存.是我刚刚发现的类似问题.
更新:我试图将Cookie的到期日期设置为大约十年,但问题仍未解决:

+ (void)loadCookies
{
    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"SAVED_COOKIES"]];
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];

    for (NSHTTPCookie *cookie in cookies)
    {
        NSMutableDictionary *newProperties = [[NSMutableDictionary alloc]initWithDictionary:cookie.properties];
        NSDate *date = [newProperties objectForKey:NSHTTPCookieExpires];
        if(date == nil)
            [newProperties setObject:[[NSDate date] dateByAddingTimeInterval:100*12*30*60*60] forKey:NSHTTPCookieExpires];
        else
            [newProperties setObject:[[NSDate date] dateByAddingTimeInterval:100*12*30*60*60] forKey:NSHTTPCookieExpires];
        NSHTTPCookie *newCookie = [NSHTTPCookie cookieWithProperties:newProperties];
        [cookieStorage setCookie: newCookie];
        NSLog(@"%@",newCookie);
    }
}
Run Code Online (Sandbox Code Playgroud)

eli*_*o.d 11

这只是一种可能的实现:首先存储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)

恢复cookie:

- (void)loadCookies {
   NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey: @"cookies"]];
   NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
   for (NSHTTPCookie *cookie in cookies) {
    [cookieStorage setCookie: cookie];
   }
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

3706 次

最近记录:

9 年,6 月 前