2010-07-16 5 views
3

J'accède aux informations sécurisées d'un serveur et envoie un tas de cookies à l'application sur demande. Le problème est quelques-uns des cookies ne sont que la session et quand je l'utilise:Accès aux cookies de session avec NSHTTPCookieStorage

[NSHTTPCookie requestHeaderFieldsWithCookies:[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:theCookie]] 

il ne retourne pas les session avec le nom JSESSIONID et provoque des problèmes. Si je NSLog le NSHTTPCookieStorage complet il affiche ceux de la session afin qu'ils soient là, je ne peux pas trouver un moyen de les récupérer hors du stockage. J'ai aussi jeté un coup d'oeil à la liste des cookies et les cookies de session ne sont pas stockés là mais je suppose que c'est juste parce qu'ils sont basés sur une session.

Toute aide est appréciée.

Edit: Voici un extrait de ce que je reçois quand je demande tous les cookies:

<NSHTTPCookie version:0 name:@\"TheNameOfTheCookie\" value:@\"A variable number\" expiresDate:@\"(null)\" created:@\"301196844.000000\" sessionOnly:TRUE domain:@\"THE URL\" path:@\"/\" secure:FALSE comment:@\"(null)\" commentURL:@\"(null)\" portList:[]> 

<NSHTTPCookie version:0 name:@\"JSESSIONID\" value:@\"A variable number\" expiresDate:@\"(null)\" created:@\"301196866.000000\" sessionOnly:TRUE domain:@\"The Same URL as above\" path:@\"/path\" secure:FALSE comment:@\"(null)\" commentURL:@\"(null)\" portList:[]> 

Maintenant, quand je demande les cookies en fonction de l'URL dans les cookies ci-dessus, premier est renvoyée, deuxième on ne le fait pas.

* Notez désolé d'avoir à supprimer certains éléments, ils sont comme prévu et ne sont pas pertinentes pour la question

+0

sans les url réelles ou les valeurs dérivées (pour ma partie 'tr/a-z/z-a /' eux ...) nous pouvons seulement deviner: pourrait-il être un problème de cas? Certains serveurs Web sont insensibles à la casse, tandis que le reste du monde ne le sont pas. Pourriez-vous fournir un exemple autonome qui montre le comportement? – mvds

+0

Eh bien ce n'est pas un problème de serveur car le vrai cookie n'est pas retourné à partir du stockage, je pense que cela pourrait être un problème de nommage car il y a plusieurs entrées de JSESSIONID. J'ai même entré manuellement un cookie avec des détails similaires mais une URL différente et je n'ai pas pu le récupérer non plus. Avait le même nom cependant, JSESSIONID. – Rudiger

Répondre

0

S'il vous plaît briser votre problème en morceaux, vérifiez d'abord si

[[NSHTTPCookieStorage sharedHTTPCookieStorage] 
    cookiesForURL:[NSURL URLWithString:theCookie]] 

retours que vous pense qu'il devrait revenir. Sinon, regardez de plus près la valeur de theCookie.

+0

J'ai et j'ai testé ce que je reçois à travers le navigateur Web par rapport à ce que je reçois à travers l'application iPhone et ce qui est attendu, sauf pour le JSESSIONID. J'utilise NSURLConnection pour récupérer le contenu de quelques sites Web différents. Chaque fois que je vérifie je ne reçois pas de JSESSIONID alors que je le fais par le biais du navigateur Web – Rudiger

+0

cela devient un peu vague, pouvez-vous fournir un extrait de code et une trace montrant ce que vous voyez? Par exemple. le cookiejar complet et le cookiesForUrl filtré, y compris l'URL.Donc, nous pouvons tous voir l'étrangeté, et pourrait expliquer ou au moins le reproduire. – mvds

+0

Mise à jour, pas plus près de comprendre. – Rudiger

0

Quelle est l'URL réelle que vous passez à -cookiesForURL:? Si l'URL n'a pas de chemin correspondant à celui spécifié dans votre entrée de cookie JSESSIONID (par exemple, http://example.com/path), la méthode -cookiesForURL: ne le retournera pas.

2

J'ai eu ce problème, la raison en est que le NSHTTPCookieDomain. les biscuits doivent avoir le même domaine

.... domain:@\"THE URL\" path:@\"/\" .... 
.... domain:@\"The Same URL as above\" path:@\"/path\" .... 

doit être

.... domain:@\"NAME-DOMAIN" path:@"/" .... 

je change juste que, et mettre le même domaine et le chemin et travaille

Mon JSESSIONID:

<NSHTTPCookie version:0 name:"JSESSIONID" value:"7C9B0...........EB5" expiresDate:(null) created:2012-07-06 16:14:26 +0000 (3.63284e+08) sessionOnly:TRUE domain:"FOO" path:"/" isSecure:FALSE> 
Questions connexes