web-dev-qa-db-ja.com

AlamofireはCookieを自動的に保存しますか?

私は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ページ でもそれについて何も見つからないためです。

29

はい! Alamofireは基本的にNSURLSessionのラッパーです。そのマネージャーは、defaultSessionConfiguration()を呼び出すことにより、デフォルトのNSURLSessionConfigurationを使用します。

そのgithubページが Advanced Usage セクションの下で言うように:

AlamofireはNSURLSessionとFoundation URL Loading Systemに基づいて構築されています。このフレームワークを最大限に活用するには、基盤となるネットワークスタックの概念と機能に精通していることが推奨されます。

そして Manager セクションの下:

Alamofire.requestなどのトップレベルの便利なメソッドは、Alamofire.Managerの共有インスタンスを使用します。これは、default NSURLSessionConfigurationで構成されます。

そして NSURLSessionConfiguration reference for defaultSessionConfiguration()はこう言います:

デフォルトのセッション構成では、永続的なディスクベースのキャッシュを使用し(結果がファイルにダウンロードされる場合を除く)、ユーザーのキーチェーンに資格情報を保存します。また、NSURLConnectionおよびNSURLDownloadクラスと同じ共有CookieストアにCookieを(デフォルトで)保存します。

48
Wallace Campos

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()
                    ]
0
norbDEV