【问题标题】:Keep losing php session cookie in UIWebView在 UIWebView 中不断丢失 php 会话 cookie
【发布时间】:2013-02-06 12:26:31
【问题描述】:

我是论坛的新手,对 iOS 开发也很陌生。我在使用 UIWebView 时遇到问题,我一直失去对设置 phpsession cookie 的 HTML 表单的登录权限(过期设置为 8h,适用于桌面)。似乎 UIWebView 在大约一个小时左右而不是 8 小时后将 cookie 扔掉。我读过 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 domain:"mydomain.com" path:"/" 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];

【问题讨论】:

    标签: ios objective-c xcode cookies uiwebview


    【解决方案1】:

    我在我的应用程序中使用了许多请求,每次发送请求时,我都会从 NSHTTPCookieStorage 获取 url 的 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"];
    }
    

    它有效

    【讨论】:

    • 将立即尝试!谢谢!
    • 好吧,即使使用您的解决方案,我仍然无法登录...还有什么想法吗?
    • 确保您在 cookiesToSet 中有 cookie。 (你可以在for循环中放断点)。
    • 如果您在 nslog 中看到 cookie,那么它应该可以正常工作。为了确保我会在服务器端进行检查。在您进行检查时,请不要忘记清除(在计算机上)您在上一次会话中(可能)拥有的 cookie。
    • 一定是服务器端的问题,否则你的回答会解决问题,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 2012-05-09
    • 2012-06-03
    • 1970-01-01
    • 2016-10-21
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多