禁用cachingAlamofire iOS

我试图使用Alamofire进行iOS请求时禁用caching。 当我尝试向服务器发出请求,然后以不同的用户身份进行身份validation时发出请求,我得到一个304状态码。

我试过这个链接的一切,所有这些都不工作或导致错误。

后端使用Express.js处理请求,并使用Passport.js进行用户身份validation。

在Alamofire和iOS应用程序上禁用caching的正确方法是什么? 还是有什么我可以做,以防止这种情况发生在后端? 无论哪种方式,我不太确定下一步如何前进。

更新

看了这个问题多一点,看起来Alamofire发送完全相同的authentication信息,即使是传递到authentication部分的信息是完全不同的。 但是,如果我等几分钟再次尝试请求,它会更新到正确的身份validation信息。 即使您在新请求中更新身份validation信息,也几乎可以将身份validation信息caching几分钟。 所以你不能改变authentication信息,直到每几分钟清除一次。 这使得更less的意义。

更新2

以下是我的代码

func reloadData() { print("Reloading data!!") let headers: HTTPHeaders = [ "testvalidationtoken": "test", ] let keychain = KeychainSwift() let email: String = keychain.get("email")! let password: String = keychain.get("password")! var configuration = URLSessionConfiguration() configuration.urlCache = nil var manager : SessionManager = SessionManager(configuration: configuration) manager.request("http://IPHERE:3000/api/path", headers: headers).authenticate(user: email, password: password).validate().responseJSON { response in switch response.result { case .success(let value): let json = JSON(value) print("JSON: \(json)") for item in json.array! { let title: String? = item["title"].stringValue self.titles.append(title!) self.colors.append(UIColor.blue) } self.tableView.reloadData() case .failure(let error): print ("My Error") print (error) let alertController = UIAlertController(title: "Error", message: "Error, please try again", preferredStyle: UIAlertControllerStyle.alert) let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) { (result : UIAlertAction) -> Void in } alertController.addAction(okAction) self.present(alertController, animated: true, completion: nil) } } } 

更新3

 let loginString = String(format: "%@:%@", email, password) let loginData = loginString.data(using: String.Encoding.utf8)! let base64LoginString = loginData.base64EncodedString() print(base64LoginString) let headers: HTTPHeaders = ["Authorization": "Basic \(base64LoginString)"] 

所以在使用这个最新的代码来处理HTTPauthentication后,我仍然遇到问题。 在iOS设备上打印base64LoginString时,返回一个值,然后使用这些头向服务器发送请求authorization =先前的值。

如果你想在Alamofire中完全禁用caching,你必须创build没有urlCache自定义pipe理器

 var configuration = URLSessionConfiguration.default configuration.urlCache = nil configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders var manager : SessionManager = SessionManager(configuration: configuration) manager.request(...) 

你可以试试这个:

 let cstorage = HTTPCookieStorage.shared if let cookies = cstorage.cookies(for: url) { for cookie in cookies { cstorage.deleteCookie(cookie) } } 

希望对你有帮助