Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/07/2007, 15h24   #1
Invité de passage
 
Inscription : avril 2003
Messages : 19
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 19
Points : 3
Points : 3
Par défaut [Cookies] session_id en POST

bonjour

Je bute sur un problème de session.
Je voudrais passer l'identifiant de session par la méthode "POST" (pas que cookie et pas d'altération d'url siouplé)

voici donc mon proto (fichier php sur "http://fvpatwds.tuxfamily.org/"):

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?PHP
ini_set( 'session.use_cookies', 0 );
if (isset($_POST['SESSID']) && session_id($_POST['SESSID'])){
	session_start();
	print("session existante<br/>");
	$_SESSION['compt']+=1;
	print($_SESSION['compt']."<br/>");
	print('<form method="post" action="'.$_SERVER["PHP_SELF"].'">');
	print('<input type="hidden" name="SESSID" VALUE="'.session_id().'">');
	print('<input type="submit" name="upload" class="lien" value="continuer"></form>');
}else{
	session_start();
	$_SESSION['compt']=0;
	print('<form method="post" action="'.$_SERVER["PHP_SELF"].'">');
	print('<input type="hidden" name="SESSID" VALUE="'.session_id().'">');
	print('<input type="submit" name="upload" class="lien" value="creer"></form>');
}
print(session_id());
?>
Ce que j'atent de ce bout de code c'est qu'il se comporte comme un compteur.
Le fichier session ce créer bien dans le répertoires "TMP", il est bien créer avec une valeur "compt" mais l'incrémentassions ne marche pas !
Pourtant l'id de la session et bien transmise... là je sèche !

Des idées ???
LEIôPAR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2007, 16h22   #2
Membre régulier
 
Avatar de The Nux
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : février 2006
Messages : 79
Points : 84
Points : 84
Envoyer un message via MSN à The Nux
J'ai rien compris à ce que tu voulais faire... Pourquoi une sorte de compteur ? Pourquoi tu ne veux ni cookie ni alteration d'URL ? C'est hyper chiant de passer des données par POST, ça te fait utiliser des formulaires à chaque fois...
Et surtout, pourquoi tu utilises session_start() ? Si ce n'est pas configuré spécifiquement ça créé automatiquement un cookie...
The Nux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2007, 17h45   #3
Invité de passage
 
Inscription : avril 2003
Messages : 19
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 19
Points : 3
Points : 3
Citation:
Envoyé par The Nux
J'ai rien compris à ce que tu voulais faire... Pourquoi une sorte de compteur ?
Le bout de code que j'ai posé est une épure du problème qui me bloque. Bien sûr que je ne veux pas juste faire un compteur !

Citation:
Envoyé par The Nux
Pourquoi tu ne veux ni cookie ni alteration d'URL ? C'est hyper chiant de passer des données par POST, ça te fait utiliser des formulaires à chaque fois...
Pour les cookie, c'est pô ma faute ! ce sont les clients qui ne veulent pas !
Pour les url... ben dans le projet, à terme, elle devront etre propre... c'est une longue histoire.

Citation:
Envoyé par The Nux
Et surtout, pourquoi tu utilises session_start() ? Si ce n'est pas configuré spécifiquement ça créé automatiquement un cookie...
en effet, j'ai oublié une ligne :
Code :
ini_set( 'session.use_cookies', 0 );
mais ca ne change rien !
LEIôPAR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2007, 02h57   #4
Membre régulier
 
Avatar de The Nux
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : février 2006
Messages : 79
Points : 84
Points : 84
Envoyer un message via MSN à The Nux
Ok par ce que en fait par le POST ça risque bien d'être un parcours du combatant... Tu peux peut être faire du URL rewriting, par exemple

http://monsite.com/6165136251351/page.htm

le 6165136251351 étant le SID... Bon c'est pas ce qu'on fait de mieux mais pourquoi pas... Si ça te va pas demain je réfléchis à ton problème un peu mieux mais là j'ai la tête dans le ***
The Nux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2007, 16h29   #5
Invité de passage
 
Inscription : avril 2003
Messages : 19
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 19
Points : 3
Points : 3
bonne nuit !
S'attend tes idées avec espoir !
LEIôPAR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2007, 23h30   #6
Membre régulier
 
Avatar de The Nux
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : février 2006
Messages : 79
Points : 84
Points : 84
Envoyer un message via MSN à The Nux
Bon j'ai fait un truc qui peut aller plus ou moins mais il reste des choses à voir par ce que il se peut que ça ne corresponde pas exactement à tes besoins (dans les détails)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
	<head>
		<title>Test de l'envoi de SID par POST</title>
 
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
		<script type="text/javascript">
			function loadPage(url) {
				var linkForm = document.getElementById("linkForm");
				linkForm.action = url;
				linkForm.submit();
			}
 
			function linksContamination () {
				var links = document.links;
 
				for (var i = 0; i < links.length; i++) {
					if (getDomainOfUrl(links[i].href) == getDomainOfUrl(document.URL) && (links[i].href.substr(0, 7) == "http://" || links[i].href.substr(0, 8) == "https://"))
						links[i].href = "javascript:loadPage('"+links[i].href.replace(/\'/g,'%2527')+"')";
				}
			}
 
			function getDomainOfUrl (url) {
				var startPos = url.indexOf("://", 0) + 3;
 
				var endPos = url.indexOf("/", startPos);
				if (endPos < 0) endPos = url.length;
 
				return url.substr(startPos, endPos - startPos);
			}
		</script>
	</head>
 
	<body onload="linksContamination()">
		<form id="linkForm" action="" method="post">
			<input id="linkField" type="hidden" name="SID" value="POIHGODSHGOD" />
		</form>
 
		SID = <?=$_POST["SID"];?> <br />
 
		<a href="index.php">Un lien contaminé au chargement de la page</a><br />
		<a href="javascript:loadPage('index.php)">Un lien déjà contaminé</a><br />
		<a href="http://www.google.fr/">Un lien externe</a>
	</body>
</html>
Ceci est une page exemple de ce que j'ai fait, tu peux remprendre les éléments essentiels (ou les autres) dans tes pages. L'essentiel c'est le formulaire
Code :
1
2
3
		<form id="linkForm" action="" method="post">
			<input id="linkField" type="hidden" name="SID" value="POIHGODSHGOD" />
		</form>
et la fonction loadPage().

En fait, quand on appelle la fonction loadPage avec en argument l'URL d'une page, modifie l'action du formulaire et envoi le formulaire. Avec cette technique, il faut que ce formulaire soit toujours présent sur la page. Tu peux le mettre à la fin du code par exemple et le cacher avec un CSS, de toute façon il est vide puisqu'il ne contiens qu'un champ hidden...
Donc en fait pour charger une page avec le SID en POST, il faut que ton lien soit
Code :
<a href="javascript:loadPage('./index.php')">Mon Lien</a>
comme ça quand l'utilisateur clique sur le lien ça appelle la fonction loadPage et l'utilisateur est envoyé sur la page qu'il a demandé en envoyant le SID via POST.
Les deux autres fonctions peuvent te convenir, mais ça peut aussi te gêner. Le getDomainOfUrl() est une fonction qui analyse une URL pour connaitre le domaine, mais en fait elle est juste utilisée par linksContamination() qui est une fonction dont le rôle est de "contaminer" tout les liens. C'est à dire qu'elle va faire le tour de tout les liens de la page pour faire en sorte qu'ils appellent loadPage() si ce n'est pas déjà le cas (et si ils pointent vers une page qui se trouve dans le même domaine que la page actuelle.)
Par exemple, ça va changer
Code :
<a href="./index.php">Mon Lien</a>
En
Code :
<a href="javascript:loadPage('./index.php)">Mon Lien</a>
Mais par contre
Code :
<a href="http://www.google.fr/">Google</a>
sera laissé intact.

Donc en fait, soit tu peux écrire directement les liens avec loadPage(), soit tu décides d'utiliser linksContamination(), qui est plus pratique, mais en même temps plus susceptible d'avoir des bugs.

Pour finir, si tu fais des formulaires, alors il faut obligatoirement que tu mettes un champ hidden qui contient le SID, sinon ça va tout foirer.

Ah et aussi, je sais pas si tu as vu, mais le formulaire caché de la page contient un champ hidden, il faut que tu changes sa valeur avec PHP en fonction du SID de la session.

Voila voila... J'espère que j'ai été compréhensible dans mes explications
The Nux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2007, 12h45   #7
Membre actif
 
Inscription : novembre 2003
Messages : 236
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2003
Messages : 236
Points : 159
Points : 159
Il me semble deja avoir eu un probleme du meme genre.
Et en fait c'etait tout bete. il me semble que isset considerais mon 0 comme etant vide. Donc en fait chaque fois tu repasse dans ton else...

A verfier...
Dokho1000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2007, 14h20   #8
Membre régulier
 
Avatar de The Nux
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 22

Informations forums :
Inscription : février 2006
Messages : 79
Points : 84
Points : 84
Envoyer un message via MSN à The Nux
C'est empty() qui retourne true si la valeur de la variable testée est 0. En fait, ça retourne true si la valeur de la variable est équivalente à null, donc en fait
est équivalent à
La fonction empty() étant donc à utiliser avec précautions et modération... Il faut être bien conscient de ce qu'elle fait avant de l'utiliser.
Cependant, isset() lui verrifie si une variable est définie, donc même si la variable a une valeur équivalente à null ça marchera.
__________________
Nouveau bachelier et futur ingénieur
Et j'ai même un blog !
The Nux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2007, 08h46   #9
Invité de passage
 
Inscription : avril 2003
Messages : 19
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 19
Points : 3
Points : 3
bon... en sortant le "session_id" de la condition de départ, tout rentre dans l'ordre :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?PHP
ini_set( 'session.use_cookies', 0 );
if (isset($_POST['SESSID'])){
	session_id($_POST['SESSID']);
	session_start();
	print("session existante<br/>");
	$_SESSION['compt']+=1;
	print($_SESSION['compt']."<br/>");
	print('<form method="post" action="'.$_SERVER["PHP_SELF"].'">');
	print('<input type="hidden" name="SESSID" VALUE="'.session_id().'">');
	print('<input type="submit" name="upload" class="lien" value="continuer"></form>');
}else{
	session_start();
	$_SESSION['compt']=0;
	print('<form method="post" action="'.$_SERVER["PHP_SELF"].'">');
	print('<input type="hidden" name="SESSID" VALUE="'.session_id().'">');
	print('<input type="submit" name="upload" class="lien" value="creer"></form>');
}
print(session_id());
?>
Je vais donc tester l'existence de la session de façon diférante (pour savoir si elle n'a pas expiré)

Merci à tous pour vos idées.
LEIôPAR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h14.


 
 
 
 
Partenaires

Hébergement Web