Bonjour la communauté,

Après plusieurs heures de lectures et de code, je n'arrive pas à faire suivre une authentification par HTTP POST...

J'arrive bien à me loguer avec le login/pass et récupérer le cookie PHPSESSID.
Ensuite j'écris le cookie dans mes requetes GET sur des pages privés, mais celui-ci ne reconnait pas ma session, et me demande de m'identifier à nouveau.


Pour poster le formulaire, je fais simplement comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        http = new QHttp(this);
	test = 0;
	QObject::connect(http, SIGNAL(done(bool)), this, SLOT(getSession()));
	QObject::connect(http, SIGNAL(responseHeaderReceived(QHttpResponseHeader)), this, SLOT(readHeader(QHttpResponseHeader)));
 
	QByteArray content = "user=test_account&passwrd=pass_de_test";
	QHttpRequestHeader header("POST", "/index.php?action=login2;sa=check;wap2");
	header.setValue("Host", "www.monsite.com");
	header.setContentLength(content.length());
	header.setContentType("application/x-www-form-urlencoded");
	http->setHost("www.monsite.com");
	http->request(header, content);
 
        // debug: header sent
	std::cout << "header sent:\n " << header.toString().toLatin1().data() << std::endl;
J'affiche les headers reçus à chaque fois que j'en recois juste pour débuguer, et lance le slot getSession() lorsque la requête est "done".
Le getSession :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void ForumLogin::getSession() {
	std::cout << "html "<< test <<" :\n" << http->readAll().data() << std::endl;
	if (test <= 0) {
                // Si c'etait la premiere requete, donc celle de POST du login/pass
                // On enregistre le PHPSESSID et on demande une page privee
		PHPSESSID = (char*) malloc(42);
		strcpy(PHPSESSID, http->lastResponse().value("Set-Cookie").left(42).toLatin1().data());
                // PHPSESSID=xxxx AVEC xxx faisant 32 chars
		test++;
		QHttpRequestHeader header("GET", "/index.php?action=page_privee;wap2");
		header.setValue("Host", "www.monsite.com");
		header.setValue("Cookie", PHPSESSID);
		http->setHost("www.monsite.com");
		http->request(header);
 
                // debug: header sent
		std::cout << "header sent:\n " << header.toString().toLatin1().data() << std::endl;
	}
        // debug: quel est le PHPSESSID?
	std::cout << "PHPSESSID: " << PHPSESSID << std::endl;
}
Lors de l'execution, si je mets les bons login/pass, j'obtiens bien le MOVED TEMPORARLY en reponse:

Premiere requete:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
header sent:
 POST /index.php?action=login2;sa=check;wap2 HTTP/1.1
Host: www.monsite.com
content-length: 38
content-type: application/x-www-form-urlencoded
 
 
header received:
 HTTP/1.1 302 Moved Temporarily
Date: Wed, 10 Feb 2010 15:26:09 GMT
Server: Apache
Cache-Control: private
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
X-Powered-By: PHP/5.2.12
Set-Cookie: PHPSESSID=c007cfb286ffd9bcb01a992f3d1e2cd2; path=/
Location: http://www.monsite.com/index.php?PHPSESSID=c007cfb286ffd9bcb01a992f3d1e2cd2;;wap2
Transfer-Encoding: chunked
Content-Type: text/html
 
 
html 0 :
Le premier contenu est vide (la page a "moved temporarly") lorsque les login/pass sont corrects.
Je recois une page HTTP OK avec "mauvais mot de passe" ou "identifiant inconnu" si je mets des informations erronnees.

Cependant, ca foire pour la seconde requete, il ne me reconnait pas...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
header sent:
 GET /index.php?action=autobuyer;wap2 HTTP/1.1
Host: www.monsite.com
Cookie: PHPSESSID=c007cfb286ffd9bcb01a992f3d1e2cd2
 
 
PHPSESSID: PHPSESSID=c007cfb286ffd9bcb01a992f3d1e2cd2
 
header received:
 HTTP/1.1 200 OK
Date: Wed, 10 Feb 2010 15:26:09 GMT
Server: Apache
Cache-Control: private
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Pragma: no-cache
X-Powered-By: PHP/5.2.12
Last-Modified: Wed, 10 Feb 2010 15:26:10 GMT
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
 
 
html 1 :
 ... une page html pour se connecter ...
Il n'a pas reconnu mon identification...
J'ai pourtant passé le header.setValue("Cookie", PHPSESSID) lors de ma seconde requête.
Et je vérifie le header sent il est bon... quel est le souci ?