Ios 如何让UIWebView会话永不过期
我正在尝试将会话保存在Ios 如何让UIWebView会话永不过期,ios,iphone,uiwebview,nsurlrequest,Ios,Iphone,Uiwebview,Nsurlrequest,我正在尝试将会话保存在UIWebView上,如下链接所示: 在viewDidLoad中: NSURLRequest *webRequest = [NSURLRequest requestWithURL:homeURL]; NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]; NSMutableURLRequest *requestMut = [NSMutableURLRequest request
UIWebView
上,如下链接所示:
在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];
但应用程序再次出现在登录屏幕上,即会话未保存。是我刚刚发现的一个类似的问题没有回答。更新:我试图将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);
}
}
这只是一种可能的实现: 先把饼干放好
- (void)saveCookies {
NSData *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject: cookiesData forKey: @"cookies"];
[defaults synchronize];
}
还原Cookie:
- (void)loadCookies {
NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey: @"cookies"]];
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in cookies) {
[cookieStorage setCookie: cookie];
}
}
你们在模拟器上测试过吗?如果应用正在运行,您再次点击run按钮,它可能没有时间保存cookie。我做了一个简单的loadRequest,没有关于cookie的任何代码,也不需要再次登录。您可以在设备和其他URL上尝试,这可能是服务器问题。何时调用保存和加载Cookie?
- (void)loadCookies {
NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey: @"cookies"]];
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in cookies) {
[cookieStorage setCookie: cookie];
}
}