2012-04-23 8 views
10

Je voudrais comprendre les quatre options de cURL pour les cookies:cURL - les cookies et sessions

CURLOPT_COOKIESESSION 
CURLOPT_COOKIEFILE 
CURLOPT_COOKIEJAR 
CURLOPT_COOKIE 

Je comprends que COOKIEJAR est conçu pour les cookies d'écriture et COOKIEFILE est destiné à la lecture. Alors, qu'est-ce que COOKIESESSION? Le CURLOPT_COOKIE est personnalisé, mais puis-je l'utiliser pour maintenir une session avec le serveur?

+1

n'est pas deuxième et quatrième même? – Pheonix

Répondre

19

Pour comprendre CURLOPT_COOKIESESSION, vous devez savoir quelques choses sur les cookies. Les cookies ont des dates d'expiration qui sont définies par le site Web qui émet le cookie. Si une date d'expiration d'un cookie est passée, le navigateur/client ne l'enverra pas, et il sera supprimé par le client. Si un cookie est défini sans date d'expiration, le navigateur doit utiliser ce cookie jusqu'à ce que la session du navigateur soit fermée ou que l'utilisateur se déconnecte et que le cookie soit désactivé. Cela dit, CURLOPT_COOKIESESSION est un moyen d'obtenir que cURL simule avoir fermé le navigateur. Si le COOKIEFILE contient des cookies de session (cookies sans expiration), il les enverra normalement s'ils étaient présents dans le fichier. Si vous définissez CURLOPT_COOKIESESSION, alors il n'enverra aucun des cookies qui n'ont pas de date d'expiration. Vous donne juste un moyen de définir les données de cookie qui seront envoyées au serveur au format brut. Ceci est utile si vous avez par exemple un cookie HTTP brut que vous souhaitez envoyer. Sans cette option, vous devriez obtenir ces cookies dans le COOKIEFILE, ou définir un en-tête HTTP personnalisé Cookie: avec la valeur brute que vous aviez.

+0

J'ai besoin d'utiliser deux scripts distincts qui doivent partager le même cookie de session. donc je voudrais ** (1) ** démarrer une nouvelle session avec le serveur, ** (2) ** maintenir la session pour plusieurs pages (init, set, exec, close), ** (3) ** ferme le script. ** (4) ** ouvrir le nouveau script, ** (5) ** reprendre la même session, ** (6) ** et fermer et supprimer le cookie. Donc je devrais commencer par COOKIESESSION = TRUE, COOKIEJAR = cookiefilename et COOKIEFILE = cookiefilename, pour le premier. COOKIESESSION = FALSE, COOKIEFILE = cookiefilename pour le script 1, et continuez simplement dans le script 2 sans COOOKIESESSION = TRUE? – Ted

+0

Cela dépend si les cookies de connexion sont en réalité des cookies de session ou des cookies persistants. Si c'est le dernier, COOKIESESSION n'aidera pas. Pour être sûr, vous pouvez simplement effacer le contenu du fichier cookie avant de commencer dans le script 1. Vous pouvez également avoir le script 2 déconnexion du site en question en cliquant sur l'URL de déconnexion. Je pense à la fois dans le script 1 et le script 2, je voudrais spécifier à la fois COOKIEFILE et COOKIEJAR, de sorte que si script2 fait une demande, toutes les modifications apportées au cookie seront enregistrées dans le fichier. COOKIESESSION est également faux par défaut. – drew010

+0

ils sont séquentiels. après la fin du script 2, je supprime le cookie en utilisant unlink. Je suppose que je peux dire que c'est un cookie de session par ceci: PHPSESSID. Donc c'est. Est-ce que ce que j'ai dit un commentaire avant, (COOKIESESSION = VRAI pour le premier, faux pour le reste) est vrai? – Ted