Sessions avec des requêtes NSURLConnection POST

elfelf Membre
06:13 modifié dans API AppKit #1
Bonsoir,

En ce moment je bosse sur un projet pour lequel je dois envoyer des requêtes POST à  un serveur web et garder les sessions. Est-ce possible avec des NSURLConnection?

Merci d'avance,
elf

Réponses

  • BruBru Membre
    06:13 modifié #2
    Je ne vois pas ce que NSURLConnection (manageant une connexion) vient faire avec l'envoi de variables en mode POST ou GET d'une requête HTTP.

    Donc c'est NSURLRequest (enfin surtout NSMutableURLRequest) qui est responsable de ça.
    Un -[NSMutableURLRequest setHTTPMethod:@POST],
    suivi d'un -[NSMutableURLRequest setValue:@valeur forHTTPHeaderField:@variable] pour chaque variable, et le tour est joué !

    .
  • elfelf Membre
    06:13 modifié #3
    Pardon, je voulais dire NSURLRequest.

    J'ai bien utilisé la méthode que tu as décrite mais le problème c'est que il ne garde pas les sessions. En fait je dois me logguer sur un service web puis faire une action. Le problème c'est que comme ca perd les sessions ca me déloggue a chaque fois que je recharge.

    Par contre, mes requetes POST fonctionne très bien.

    Kenneth
  • BruBru Membre
    novembre 2006 modifié #4
    Tu ne sembles pas connaà®tre le protocole http...

    Http est un protocole de communication totalement ASYNCHRONE fonctionnant en mode requête/réponse pure.
    Il n'y a donc pas de notion de session/transaction qui persisterait de requêtes en requêtes.

    Pour palier à  cet inconvénient, les serveurs http simulent la notion de session/transaction en mémorisant la première connection au serveur d'un client http (après demande d'identification). Ensuite, à  chaque réponse, un identifiant de session sera transmis au client. Et lorsque le client soumettra une nouvelle requête, il y inclura cet id, permettant au serveur de recupérer le contexte de la session/transaction.

    Le passage de cet id entre client et serveur se fait selon 2 méthodes : variable http (transmise en GET ou POST), et cookie.
    Sur OC, l'id semble être un cookie de nom PHPSESSID si la gestion des cookies est autorisée par le client, sinon, c'est une variable GET de nom PHPSESSID.

    En ce qui te concerne, c'est à  toi de savoir comment ton serveur gère les transactions, puis comment il transmet cette information au client.
    Une fois ceci déterminée, c'est à  toi de programmer dans ton NSURLRequest le renvoi de cette information dans le format demandé par le serveur.

    .
  • elfelf Membre
    06:13 modifié #5
    T'en fais pas, je connais bien le protocole http ^^
    Je supose que PHP4 utilise aussi ce cookie PHPSESSID, pour gérer par défaut ses $_SESSION, mais pratiquement, en Cocoa, comment je fais pour autoriser les cookies?
  • BruBru Membre
    06:13 modifié #6
    La gestion des cookies est normalement transparente.

    Quand tu construis ton NSMutableURLRequest, il te suffit d'appeler la méthode setHTTPShouldHandleCookies avec YES.
    Dans ce cas, les NSHTTPURLResponse reçus mettront à  jour la base de cookies.
    De même, les NSURLRequest suivantes passeront les cookies déjà  enregistrés.

    .
  • muqaddarmuqaddar Administrateur
    06:13 modifié #7
    dans 1162502654:

    Dans ce cas, les NSHTTPURLResponse reçus mettront à  jour la base de cookies.
    De même, les NSURLRequest suivantes passeront les cookies déjà  enregistrés.


    La base de cookies est mise à  jour toute seule ? C'est sûr ?
    N'y a-t-il rien d'autre à  faire quand on récupère NSURLResponse dans un delegate ?


Connectez-vous ou Inscrivez-vous pour répondre.