IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Cookies] session_id en POST


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 26
    Points : 21
    Points
    21
    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 : 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
    <?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 ???

  2. #2
    Membre régulier Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 88
    Points
    88
    Par défaut
    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...
    Nouveau bachelier et futur ingénieur
    Et j'ai même un blog !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set( 'session.use_cookies', 0 );
    mais ca ne change rien !

  4. #4
    Membre régulier Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 88
    Points
    88
    Par défaut
    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 ***
    Nouveau bachelier et futur ingénieur
    Et j'ai même un blog !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    bonne nuit !
    S'attend tes idées avec espoir !

  6. #6
    Membre régulier Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 88
    Points
    88
    Par défaut
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="./index.php">Mon Lien</a>
    En
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="javascript:loadPage('./index.php)">Mon Lien</a>
    Mais par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <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
    Nouveau bachelier et futur ingénieur
    Et j'ai même un blog !

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    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...

  8. #8
    Membre régulier Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 88
    Points
    88
    Par défaut
    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 !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    bon... en sortant le "session_id" de la condition de départ, tout rentre dans l'ordre :
    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
    <?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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Cookies] Methode post sur un lien
    Par Tee shot dans le forum Langage
    Réponses: 20
    Dernier message: 04/06/2007, 18h32
  2. Problème avec les cookies d'identification du forum sur mon poste
    Par Flow_75 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 3
    Dernier message: 13/03/2007, 10h57
  3. [Cookies] Simple, double, différent POST...
    Par cyrill.gremaud dans le forum Langage
    Réponses: 21
    Dernier message: 16/05/2006, 13h36
  4. Réponses: 4
    Dernier message: 03/05/2006, 18h23
  5. [Cookies] $_SESSION + POST (+18 champs) = reset
    Par psykbe dans le forum Langage
    Réponses: 3
    Dernier message: 24/04/2006, 13h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo