web-dev-qa-db-fra.com

Alamofire stocke-t-il automatiquement les cookies?

Je suis nouveau sur Alamofire donc je suis désolé si c'est une question noob: ce framework stocke les cookies automatiquement ?

C'est parce que j'ai une simple demande comme celle-ci:

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)")
             }
         }

cette demande de réponse avec une session de cookie dont j'ai besoin pour faire d'autres demandes pour des raisons de sécurité; la chose étrange est que, comme par magie, je peux déjà faire les autres requêtes après cette première POST sans lire manuellement le cookie et le stocker. Je suis sûr que les autres requêtes ont besoin de la session de cookie car elles échouent sur facteur par exemple mais pas ici.

C'est juste une fonctionnalité? Parce que je ne trouve rien à ce sujet également sur le site officiel page GitHub .

29
Massimo Polimeni

Oui! Alamofire est essentiellement un wrapper autour de NSURLSession. Son gestionnaire utilise un NSURLSessionConfiguration par défaut en appelant defaultSessionConfiguration().

Comme le dit sa page github sous Utilisation avancée section:

Alamofire est construit sur NSURLSession et le système de chargement d'URL Foundation. Pour tirer le meilleur parti de ce cadre, il est recommandé de vous familiariser avec les concepts et les capacités de la pile réseau sous-jacente.

Et sous Manager section:

Les méthodes de commodité de niveau supérieur comme Alamofire.request utilisent une instance partagée d'Alamofire.Manager, qui est configurée avec la NSURLSessionConfiguration par défaut .

Et la référence NSURLSessionConfiguration pour defaultSessionConfiguration() dit:

La configuration de session par défaut utilise un cache sur disque persistant (sauf lorsque le résultat est téléchargé dans un fichier) et stocke les informations d'identification dans le trousseau de l'utilisateur. Il stocke également les cookies (par défaut) dans le même magasin de cookies partagé que les classes NSURLConnection et NSURLDownload.

48
Wallace Campos

Pour ceux qui utilisent Moya et souhaitent désactiver les cookies stockés, faites un PluginType

(la correction de l'en-tête de demande X-CSRF-Token est manquante)

Exemple très basique:

public final class DisableCookiePlugin: PluginType {
    public init() {

    }

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

Et puis utilisez-le

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