首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS UIWebView 使用持久化 Cookie 實現自動登錄

     編輯:程式設計綜合問答

核心機制

NSHTTPCookieStorage 默認**內存存儲**,App 退出後 Cookie 丟失。需顯式設置 expiresDate 並同步到磁盤。

完整流程

  1. 登錄成功後提取 Cookie:
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookies = [storage cookiesForURL:[NSURL URLWithString:@"https://yourdomain.com"]];
for (NSHTTPCookie *cookie in cookies) {
    // 設置過期時間(如 30 天)
    NSDictionary *props = [cookie properties];
    props[NSHTTPCookieExpires] = [NSDate dateWithTimeIntervalSinceNow:30*24*3600];
    NSHTTPCookie *persistentCookie = [NSHTTPCookie cookieWithProperties:props];
    [storage setCookie:persistentCookie];
}
// 強制同步到磁盤(iOS 通常自動同步,但可顯式調用)
[[NSUserDefaults standardUserDefaults] synchronize];
  1. App 啟動時自動恢復:UIWebView 會自動從共享 Cookie Storage 讀取匹配域名的 Cookie 發送請求,無需手動注入。
  1. WKWebView 替代方案(iOS 8+ 推薦):
WKWebsiteDataStore *dataStore = [WKWebsiteDataStore defaultDataStore];
dataStore.httpCookieStore.getAllCookies(^(NSArray *cookies) {
    // 同樣設置 expiresDate
});
// 或使用 WKProcessPool 共享 Cookie 池

注意事項

  • Secure/HttpOnly:若 Cookie 標記 Secure,需 HTTPS 域名;HttpOnly 不影響原生存取。
  • 同域共享:NSHTTPCookieStorage 進程級共享,同 App 內多 WebView 自動共享。
  • 隱私合規:iOS 14+ 需在 Info.plist 聲明 NSHTTPCookieAcceptPolicy 或遵循 App Tracking Transparency。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved