【问题标题】:Swift : Set custom cookies for Safari appSwift : 为 Safari 应用程序设置自定义 cookie
【发布时间】:2017-05-22 09:24:24
【问题描述】:

我有 iOS 应用程序,您需要登录并查看一些用户数据... 对于一些额外的编辑,我有指向页面的 url 链接,用户可以在哪里设置一些特殊属性,......但是如果用户已经登录应用程序,那么用户在页面内登录真的很烦人。

因此,我需要在 HTTPCookieStorage 中存储自定义 cookie,以便当用户导航到页面时,将为他设置身份验证 cookie。

如何使用键值创建自定义 cookie,并将其存储,以便 Safari 在用户导航到我的页面时使用它?

编辑


我将提供更多信息以更好地了解我的情况。

我的应用中有一个按钮。

点击此按钮后,我调用 API 以获取有效令牌。 收到令牌后,我需要将此令牌存储为 cookie。这样做的“服务器”方式是

localStorage.setItem('token', this.token)

在我将此令牌存储到 HTTPCookieStorage 后,我将打开我的页面。

UIApplication.shared.open(myURL, options: [:], completionHandler: { (success) in
                        print("Url open")
                    })

在 myURL 上的页面中,应用程序查找令牌 cookie。如果 cookie 存在,它会打开 Web 应用程序,否则会显示登录页面。

所以我的目标是防止打开登录页面。

【问题讨论】:

    标签: ios swift cookies httpcookie


    【解决方案1】:

    存储您的 cookie:

    func storeCookies() {
        let cookiesStorage = HTTPCookieStorage.shared
        let userDefaults = UserDefaults.standard
    
        let serverBaseUrl = "http://example.com"
        var cookieDict = [String : AnyObject]()
    
        for cookie in cookiesStorage.cookies(for: NSURL(string: serverBaseUrl)! as URL)! {
            cookieDict[cookie.name] = cookie.properties as AnyObject?
        }
    
        userDefaults.set(cookieDict, forKey: "cookiesKey")
    }
    

    检索:

    func restoreCookies() {
        let cookiesStorage = HTTPCookieStorage.shared
        let userDefaults = UserDefaults.standard
    
        if let cookieDictionary = userDefaults.dictionary(forKey: "cookiesKey") {
    
            for (_, cookieProperties) in cookieDictionary {
                if let cookie = HTTPCookie(properties: cookieProperties as! [HTTPCookiePropertyKey : Any] ) {
                    cookiesStorage.setCookie(cookie)
                }
            }
        }
    }
    

    【讨论】:

    • 为什么是repeat your previous identical answer?如果您认为该问题之前已被提出并回答,则可以将其标记为重复。
    • 抱歉,我不明白这如何回答我的问题?您的代码仅将已设置的 cookie 存储到 userDefaults 中,然后从用户默认值返回到 cookiesStorage。我看不到在哪里可以添加新的自定义 cookie?
    • @MartinR 这是因为有时帖子的所有者会删除问题。那么答案将不再可用。
    • 好吧不知道那件事
    • 我添加了编辑,所以我的想法可能更清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 2012-06-13
    相关资源
    最近更新 更多