Alamofire会自动存储cookie吗?

时间:2016-01-26 22:16:45

标签: ios swift post cookies alamofire

我是 Alamofire 的新手,所以我很抱歉,如果这是一个noob问题:此框架会自动存储Cookie ?< / p>

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

def get_num_students(self):
    print "There are %s students in this school." % (self.num_students)

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

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

2 个答案:

答案 0 :(得分:47)

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

正如其github页面在Advanced Usage部分中所述:

  

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

Manager部分下:

  

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

defaultSessionConfiguration()的{​​{3}}说:

  

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

答案 1 :(得分:0)

对于那些使用Moya并希望禁用存储的cookie的用户,请创建一个PluginType

(缺少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()
                    ]