继续在UIWebView中丢失php会话cookie

时间:2013-02-21 08:43:54

标签: ios objective-c xcode cookies uiwebview

我是论坛的新手,也是iOS Dev的新手。我遇到了UIWebView的问题,我不断失去对HTML表单的登录权限,该表单设置了一个phpsession cookie(过期设置为8h,适用于桌面)。似乎UIWebView在大约一个小时左右之后抛弃了cookie,而不是8h。我已经阅读过NSHTTPCookieStorage应该自动关注cookie,即使应用程序进入后台模式或退出。

NSHTTPCookie看起来像这样

NSHTTPCookie版本:0名称:“PHPSESSID”值:“6f267fdc94c1ce5fcsdgg49b59a8f46b”expiresDate:2013-02-21 01:27:58 +0000创建时间:2001-01-01 00:00:01 +0000(1 )sessionOnly:FALSE域:“mydomain.com”路径:“/”isSecure:FALSE

我确实将它保存在退出/睡眠中进入NSUserDefaults并在进入前台/打开应用程序时再次加载它,就像这里推荐的那样:How to set my web view loaded with already login user -iPhone - 仍然,我一直在丢失登录信息。

有人能指出我的方向吗?非常感谢!

我目前正在这样做(根据下面的帖子):

NSURL *lastURL = [[self.webView request] mainDocumentURL];

if (lastURL.absoluteString == NULL) {
    lastURL = [NSURL URLWithString:@"http://mydomain.com/"];
}

NSArray *cookiesForDomain = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:@"http://mydomain.com"]];
NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:lastURL];

for (NSHTTPCookie *cookie in cookiesForDomain) {

    NSString *cookieString = [NSString stringWithFormat:@"%@=%@", [cookie name], [cookie value]];

    [newRequest setValue:cookieString forHTTPHeaderField:@"Cookie"];

    NSLog(@"inserted cookie into request: %@", cookie);

}

[self.webView loadRequest:newRequest];

1 个答案:

答案 0 :(得分:5)

我在我的应用中使用了很多请求,每次发送请求时,我都会从NSHTTPCookieStorage获取网址的Cookie。我不使用NSUserDefaults或其他东西来存储cookie。

当我发送新请求时,我自己设置所需的Cookie

NSURL *myURL = ....
NSMutableRequest *mutableRequest = ....
NSArray *cookiesToSet = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:myURL];
for (NSHTTPCookie *cookie in cookiesToSet) {
    [cookieStringToSet appendFormat:@"%@=%@;", cookie.name, cookie.value];
}

if (cookieStringToSet.length) {
    [mutableRequest setValue:cookieStringToSet forHTTPHeaderField:@"Cookie"];
}

它有效