【问题标题】:Persisting Cookies In An iOS Application?在 iOS 应用程序中持久化 Cookie?
【发布时间】:2011-06-03 14:56:39
【问题描述】:

我将在 iOS 应用程序中使用 NSHTTPCookieStorage 来管理从 url 检索到的 cookie,并且我知道它将在您的应用程序运行时管理 cookie。但是,我想知道在应用程序关闭后是否可以保留 cookie。然后在再次打开应用程序时再次读取这些 cookie。 NSHTTPCookieStorage 在应用程序使用之间是否保留 cookie?或者只是在应用程序运行时?我是否需要使用CoreData 来保存这些 cookie?`

【问题讨论】:

    标签: cocoa-touch ios


    【解决方案1】:

    您需要在加载应用时重新设置 cookie。我使用这样的代码:

    NSData *cookiesdata = [[NSUserDefaults standardUserDefaults] objectForKey:@"MySavedCookies"];
    if([cookiesdata length]) {
        NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesdata];
        NSHTTPCookie *cookie;
    
        for (cookie in cookies) {
            [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
        }
    }
    

    而且效果很好。

    【讨论】:

    • MySavedCookies 已经存在了吗?还是我必须在我的应用即将停用时存储它?
    • 你必须自己保存 - 这正是我保存我的地方。
    • 在用户默认值中存储 cookie 可能是一个安全漏洞,因为所有 plist 都可以通过 iFunBox 等工具访问。它们应该被加密,但最好的行为是遵循 @gazreese 的回答。
    【解决方案2】:

    您不需要按照其他答案中的建议自己保留 cookie。 NSHTTPCookieStorage 将为您保留 cookie,但您需要确保 cookie 在服务器端设置了到期日期。

    没有到期日期的 Cookie 被视为“仅限会话”,并且会在您重新启动应用程序时被清除。您可以通过NSHTTPCookie 中的 BOOL 属性检查“仅会话”情况。这是标准的 cookie 内容,而不是 iOS 特有的内容。

    【讨论】:

    • 来到这里寻找这种清晰度,谢谢。有趣的是,当应用程序重新启动时它会被清除。您可以在桌面上重新启动 Chrome 并保持会话打开。
    • +1 我现在明白为什么我的 cookie 不再存在了 :)。谢谢!!
    • 你为我节省了很多时间!谢谢!
    • @gazreese 我正在尝试加密 iOS cordova 应用程序中的 cookie 文件。它的工作,但只有当应用程序处于前台时。当我切换应用程序或按下主页按钮时,会使用相同的数据创建新的 cookie 文件。谁能指导我如何加密 cookie 文件?
    • 你让我开心,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2016-06-24
    • 2021-11-13
    • 2013-04-28
    • 2011-02-24
    • 2021-06-02
    相关资源
    最近更新 更多