Swift 3:保存登录信息



我正在Xcode 8.2.1中开发一个简单的webview应用程序。

是的,我明白。有更新的版本可用,但我分配的Mac不会更新到High Sierra。我被困在埃尔卡皮坦。因此,我遵循了一些简单的教程,并开发了一个简单的应用程序来加载我的网站。 该应用程序本身可以运行,但有一个小问题:当用户关闭应用程序时,cookie 会自行销毁,用户将不得不再次登录。如果他们不小心关闭了应用程序或类似的东西,我不想让他们再次登录。 我该怎么做?我在这里读到我可以使用

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate 
    {
    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always
        return true
    }

但是,不幸的是,它不起作用,并且在应用程序关闭后登录信息将清除。

这是ViewController.swift

import UIKit
class ViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var myWebView: UIWebView!
    @IBAction func backButton(_ sender: Any)
    {
        if myWebView.canGoBack{
            myWebView.goBack()
        }
    }
    @IBAction func refreshButton(_ sender: Any)
    {
        myWebView.reload()
    }
    @IBAction func forwardButton(_ sender: Any)
    {
        if myWebView.canGoForward{
            myWebView.goForward()
        }
    }
    func webViewDidStartLoad(_ webView: UIWebView) {
        UIApplication.shared.isNetworkActivityIndicatorVisible = true
    }
    func webViewDidFinishLoad(_ webView: UIWebView) {
        UIApplication.shared.isNetworkActivityIndicatorVisible = false
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        myWebView.loadRequest(URLRequest(url: URL(string: "myURL")!))
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

这是AppDelegate.swift

import UIKit
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always
        return true
    }
    func applicationWillResignActive(_ application: UIApplication) {
    }
    func applicationDidEnterBackground(_ application: UIApplication) {
    }
    func applicationWillEnterForeground(_ application: UIApplication) {
    }
    func applicationDidBecomeActive(_ application: UIApplication) {
    }
    func applicationWillTerminate(_ application: UIApplication) {
    }
    func saveCookies() {
        guard let cookies = HTTPCookieStorage.shared.cookies else {
            return
        }
        let array = cookies.flatMap { (cookie) -> [HTTPCookiePropertyKey: Any]? in
            cookie.properties
        }
        UserDefaults.standard.set(array, forKey: "cookies")
        UserDefaults.standard.synchronize()
    }
    func loadCookies() {
        guard let cookies = UserDefaults.standard.value(forKey: "cookies") as? [[HTTPCookiePropertyKey: Any]] else {
            return
        }
        cookies.forEach { (cookie) in
            guard let cookie = HTTPCookie.init(properties: cookie) else {
                return
            }
            HTTPCookieStorage.shared.setCookie(cookie)
        }
    }
}

此应用程序不会在应用商店中发布,它仅适用于我公司的三个用户。这就是为什么我决定做一件简单的事情,而不是大规模的事情。

我只需要重新设置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];
    }
}

最新更新