【问题标题】:Does Alamofire store the cookies automatically?Alamofire 会自动存储 cookie 吗?
【发布时间】:2023-03-15 03:59:01
【问题描述】:

我是 Alamofire 的新手,所以如果这是一个菜鸟问题,我很抱歉:这个框架会自动存储 cookie

这是因为我有这样一个简单的请求:

Alamofire.request(.POST, loginURL, parameters: ["fb_id": fbId, "fb_access_token": fbToken])
         .responseJSON { response in
             //print(response.request)  // original URL request                          
             //print(response.response) // URL response
             //print(response.data)     // server data
             //print(response.result)   // result of response serialization

             if let JSON = response.result.value {
                 print("loginURL - JSON: \(JSON)")
             }
         }

此请求响应带有 cookie 会话,出于安全原因,我需要执行其他请求;奇怪的是,就像魔术一样,我已经可以在第一次 POST 之后执行其他请求,而无需手动读取 cookie 并存储它。我确定其他请求需要 cookie 会话,因为它们例如在邮递员上失败但不是在这里。

这只是一个功能?因为我在官方GitHub page 上也找不到任何内容。

【问题讨论】:

    标签: ios swift post cookies alamofire


    【解决方案1】:

    是的! Alamofire 基本上是NSURLSession 的包装。它的经理通过调用defaultSessionConfiguration() 使用默认的NSURLSessionConfiguration

    正如其 github 页面在 Advanced Usage 部分下所说:

    Alamofire 建立在 NSURLSession 和 Foundation URL 加载系统之上。要充分利用此框架,建议您熟悉底层网络堆栈的概念和功能。

    Manager 部分下:

    像 Alamofire.request 这样的顶级便捷方法使用 Alamofire.Manager 的共享实例,该实例使用 默认 NSURLSessionConfiguration 进行配置。

    NSURLSessionConfiguration reference 代表defaultSessionConfiguration() 说:

    默认会话配置使用基于磁盘的持久缓存(将结果下载到文件时除外)并将凭据存储在用户的钥匙串中。它还存储 cookie(默认情况下)与 NSURLConnection 和 NSURLDownload 类在同一个共享 cookie 存储中。

    【讨论】:

      【解决方案2】:

      对于那些使用 Moya 并希望禁用存储的 cookie 的用户

      (修复 X-CSRF-Token 请求标头缺失)

      非常基本的例子:

      public final class DisableCookiePlugin: PluginType {
          public init() {
      
          }
      
      public func prepare(_ request: URLRequest, target: TargetType) -> URLRequest {            
                  var mutableRequest = request            
                  mutableRequest.httpShouldHandleCookies = false
                  return mutableRequest            
          }
      }
      

      然后使用它

      MoyaProvider<Api>(
                          plugins: [
                              //NetworkLoggerPlugin(configuration: .init(logOptions: .verbose)),
                              DisableCookiePlugin()
                          ]
      

      【讨论】:

        猜你喜欢
        • 2014-07-06
        • 1970-01-01
        • 1970-01-01
        • 2015-02-27
        • 2016-01-08
        • 1970-01-01
        • 2020-12-26
        • 2015-10-30
        • 2016-05-08
        相关资源
        最近更新 更多