Problème de session insoluble :-/ ?


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Problème de session insoluble :-/ ?

Message le Sam Jan 30, 2010 11:16

Arf je m'arrache les tifs depuis hier la dessus ... si un cadors en sessions traine par ici, aide bienvenue !

Ma page index contient :

Code: Tout sélectionner
<?php
session_start();
?>


en tout debut avant le <html>. A l'intérieur un form et un bouton submit qui envoie sur se-connecter.php. Dans se_connecter.php, on a bien :

$_SESSION['pseudo']=$pseudoT;


et ensuite on affiche une confirmation :

Code: Tout sélectionner
$delai=0;
$url='http://www.az-sante.com/AA_php2/vous-etes-connecte.php';
header("Refresh: $delai;url=$url");


et la badaboum,
$_SESSION['pseudo'] est vide dans vous-etes-connecte.php (qui commence bien aussi par son :

<?php
session_start();
?>


Par contre le se-connecter.php ne contient pas de session_start :

- il n'y a que du code php et pas de section html.
- et de toute façon si je mets un session start j'ai un messge d'erreur comme quoi le header je sais plus trop quoi ...

Note : lorsque je simule la meme chose avec des pages de test contenant des liens et donc pas la commande header, tout se passe bien (la variable $_SESSION['pseudo'] reste bien accessible dans toutes les pages ...).

Donc en gros il semble que header soit fasse un destroy de la session soit pose un probleme, je sais pas. Et j'ai impérativement besoin du header pour envoyer vesr la page de confirmation.

Je suppose que j'ai du louper une marche (pour mémoire php et moi c'est une histoire qui a commencé y a 10 jours :wink: )


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8578
Inscription: 23 Nov 2005

Re: Problème de session insoluble :-/ ?

Message le Sam Jan 30, 2010 11:23

Ajoute le session_start dans se_connecter.php. Vu que c'est dans cette page que tu crées la session, tu as aussi besoin du session_start() dedans.


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Re: Problème de session insoluble :-/ ?

Message le Sam Jan 30, 2010 11:45

sauf que je peux pas ... comme indique, si je lemets (tu penses bien que ca a été la premiere chose testée, j'ai un message d'erreur comme quoi j'ai pas le droit de modifiy le header ou un truc du genre ! Bref ca boucle.

Note : en fait ma session je la crée des l'arrivée sur le site pour avoir un espace de stockage de variables entre les pages et pas simplement pour les infos membres (et lorsque je passe par une navigation classique (par a href), tout va bien ...

honolulu
WRInaute impliqué
WRInaute impliqué
 
Messages: 942
Inscription: 8 Nov 2005

Re: Problème de session insoluble :-/ ?

Message le Sam Jan 30, 2010 13:38

rien, nada, pas d'espace ou de retour à la ligne avant un session_start().


-amethyste-
WRInaute discret
WRInaute discret
 
Messages: 52
Inscription: 26 Fév 2008

Re: Problème de session insoluble :-/ ?

Message le Sam Jan 30, 2010 13:56

Donc ton problème vient de là :
Code: Tout sélectionner
header("Refresh: $delai;url=$url");


Dans ta page de confirmation, tu ne peux pas envoyer le Header s'il a déjà été envoyé. Vérifies qu'avant le code ci-dessus il n'y a rien du tout qui soit affiché, même le moindre espace.


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Re: Problème de session insoluble :-/ ?

Message le Sam Jan 30, 2010 14:21

honolulu a écrit:rien, nada, pas d'espace ou de retour à la ligne avant un session_start().

je sais, c'est toujours en premiere ligne des pages avant quoi que ce soit.


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Re: Problème de session insoluble :-/ ?

Message le Sam Jan 30, 2010 14:28

-amethyste- a écrit:Donc ton problème vient de là :
Code: Tout sélectionner
header("Refresh: $delai;url=$url");


Dans ta page de confirmation, tu ne peux pas envoyer le Header s'il a déjà été envoyé. Vérifies qu'avant le code ci-dessus il n'y a rien du tout qui soit affiché, même le moindre espace.

Ben non rien de rien ! Voila tout le code de se-connecter.php :

Code: Tout sélectionner
<?

// if ((isset($_POST['pseudo']) AND (isset($_POST['password']))
   // {
      $pseudoT=$_POST['pseudo'];
      $passwordT=$_POST['password'];
      $chaine=$pseudoT.":";
      
      // ------ on va lire le fichier
      
      $chemin=$_SERVER['DOCUMENT_ROOT']."/PROTEGE_MEMBRES/inscrits.txt";
      if (file_exists($chemin))
         {
                  $array_pseudo=file($chemin);
               $taille_array=sizeof($array_pseudo);
               

               // ------ verif que le pseudo existe dans le document
               $rangok=-1;
               for ($indice=0; $indice<=($taille_array-1); $indice++)
                   {
                      if ($rangok < 0)
                         {
                            $work="*".$array_pseudo[$indice]; // * a cause du bug de strpos (si trouvee en pos O)
                            $position=strpos($work, $chaine);
                            
                            if ($position > 0)
                               {
                                  $rangok=$indice;
                                  $work=$array_pseudo[$indice];
                               }
                         }
                   }

               if ($rangok >= 0)
                  {
                     // ----- verif que c'est le bon password
                     $passwordmd5=str_replace($chaine, "", $work); // le passe word valide
                     $longueur=strlen($passwordmd5)-1;
                     $passwordmd5=substr($passwordmd5, 0, $longueur);
                     
                     $passwordtest=md5 ($passwordT);
                     if ($passwordtest == $passwordmd5)
                        {
                        
                           // ---- mŽmorisation
                           $_SESSION['pseudo']=$pseudoT;
                           

                           // ---- affichage page de confirmation
                           $delai=0;
                           $url='http://www.az-sante.com/AA_php2/vous-etes-connecte.php';
                           header("Refresh: $delai;url=$url");
                           
                        }
                        else
                        {
                           $delai=0;
                           $url='http://www.az-sante.com/AA_php2/login-pass-invalide.php';
                           header("Refresh: $delai;url=$url");
                        }
                     $passwordT=""; // comme ca pour pas laisser trainer
                  }
                  else
                     {
                        $delai=0;
                     $url='http://www.az-sante.com/AA_php2/login-pass-invalide.php';
                     header("Refresh: $delai;url=$url");
                     }
            }
            else
            {
            echo ("file absent");
            }

   // }
   
?>



Et une fois sur "vous-etes-connecte.php", j'ai perdu $_SESSION['pseudo'] qui est vide :cry:

fullflash13
WRInaute discret
WRInaute discret
 
Messages: 57
Inscription: 18 Mai 2008

Re: Problème de session insoluble :-/ ?

Message le Dim Jan 31, 2010 15:03

Zecat a écrit:
en tout debut avant le <html>. A l'intérieur un form et un bouton submit qui envoie sur se-connecter.php. Dans se_connecter.php, on a bien :



Perso , je trouve ca bizarre de mettre une form et un submit avant la balise html ? essaie de mettre le code de soumission a l'interieur et le bout de code de se-connecter.php a l'interieur de index aussi.

Et aussi évite de mettre le chemin de ton fichiers qui contient les pass , meme si c'est en md5.
A toute


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Re: Problème de session insoluble :-/ ?

Message le Dim Jan 31, 2010 15:21

fullflash13 a écrit:Perso , je trouve ca bizarre de mettre une form et un submit avant la balise html ?

C'est pas avant le html mais dedans ...

fullflash13 a écrit:Et aussi évite de mettre le chemin de ton fichiers qui contient les pass , meme si c'est en md5.
A toute

Ca craint a quel niveau ?

Note : par sécu je vais changer le nom du rep, le nom du doc et lui coller un . devant :mrgreen:

Mais sinon quelle peut etre la faiblesse d'avoir un tel doc sur le serveur (MD5 est non réversible si j'ai bien compris)

Sinon mon problème se situe en aval du form une fois que l'on valide le submit et que ca lance se-connecter.php ou là j'ai perdu ma variable $_POST['pseudo'] dans l'opération puiqu'il refuse le session_start en debut de se-connecter.php ... ca tourne en rond mon problème.

fullflash13
WRInaute discret
WRInaute discret
 
Messages: 57
Inscription: 18 Mai 2008

Re: Problème de session insoluble :-/ ?

Message le Dim Jan 31, 2010 16:45

ReSalut,

pour le md5 il existe des sites , qui te le déchiffre , grace a des grosses base de données qui contient les equivalences passe en clair et pass en md5 , comme celui la _http://www.authsecu.com/decrypter-dechiffrer-cracker-hash-md5/decrypter-dechiffrer-cracker-hash-md5.php

Sinon pour ton probleme de connection ,
je te file mon code a moi

il est structuré avec en 1 fichier header.php , dans lequel il y a le session_start() au debut , suivis d'un code qui lit le fichier contenant les passe et determine a si on a acces ou pas a la page,
Code: Tout sélectionner
<?php
session_start();
if(!defined('IN_SITE'))die("Vous n'etes pas autoriser a voir cette page");
$pass_filename = "chemin_de_mon_fichier contenant login et pass md5";
require("function.php");
?>
<html>
<head>
<title>Panneau Administration</title>
<link type="text/CSS" rel="stylesheet" href="style.css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body bgcolor="#C9DA1A">
<?php
// Read Pass File
$user = array();
if($fp = @fopen($pass_filename,"r")){
   $count = 0;
   while(!feof($fp)){
      $user[$count] = array();
      $data = fgets($fp,255);
      if(trim($data)!=""){
         list($user[$count]['login'],$user[$count]['password'],$user[$count]['level']) = explode("\t",$data);
         // Triming all Data (remove possible \t or \n)
         $user[$count]['login'] = trim($user[$count]['login']);
         $user[$count]['password'] = trim($user[$count]['password']);
         $user[$count]['level'] = trim($user[$count]['level']);
         $count++;
      }
   }
   fclose($fp);
}
else{
   echo display_error("The filename ".$pass_filename." can't be found.",300)."<p>";
   include("footer.php");
   exit;
}
if(isset($_SESSION['login']) && isset($_SESSION['password'])){
   if(($user_id = find_user($_SESSION['login']))>=0){
      if($_SESSION['password'] != $user[$user_id]['password'])
         $user_id=-1;
   }
   else
      $user_id=-1;
}
else
   $user_id=-1;
$level_required = 0;
if(defined("LEVEL"))
   $level_required = LEVEL;
if(($level_required>0 && $user_id==-1) || ($level_required>1 && $user[$user_id]['level']!=1)){
   echo display_error("Deconnecter",300);
   include("footer.php");
   exit;
}
?>

ce fichier header require un fichier function.php our l'appel de la fonction find_user ( + autre fonction pour autre choses ):

Code: Tout sélectionner
<?php

if(!defined('IN_SITE'))die("pages non autorisées.");

function next_color($restart=0){
   static $color=0;
   if($restart==1){$color = null;}
   if($color==1){$couleur="#8DCADA";$color=2;}
   else{$couleur="#73C4DA";$color=1;}
   return $couleur;
}

function display_table($title="",$width=100){
   global $sys_conf;
   if($title=="")
      $variable_table = "</table>\n</td></tr></table>\n";
   else{
      $variable_table = "
<table width=\"".$width."\" border=0 cellpadding=0 cellspacing=0 align=\"center\" bgcolor=\"#00A3D1\" class=\"tableline\"><tr><th><u>".$title."</u>
</th></tr><tr><td>
<table width=\"100%\" border=0 cellpadding=4 cellspacing=1 align=\"center\">
";
   }
   return $variable_table;
}

function display_error($text,$width){
   echo display_table("Erreur",$width);
   echo "<tr bgcolor=\"".next_color()."\"><td align=\"center\">".$text."</td></tr>";
   echo display_table();
}

function find_user($login){
   global $user;
   for($i=0;$i<count($user);$i++)
      if(strcasecmp($user[$i]['login'],$login)==0)
         return $i;
   return -1;
}
?>



ce header.php , est inclus par tout les pages , nécessitant un accès authentifié ,
pour la page de connection :

Code: Tout sélectionner
<?php
define("IN_SITE",true);
include("header.php");
if($user_id>=0){
   if($user[$user_id]['level']==1){
      echo "<meta http-equiv=\"refresh\" content=\"1; url=server.php\">";
exit;
            
   }
   else{
      $link1 = "<a href=\"voir.php\">Visualiser les Photos</a>";
      $link2 = "<a href=\"rep.php\">Envoyer mes Photos</a>";

   }
   echo display_table("Menu Membre",600);
   echo "<tr><td bgcolor=\"".next_color()."\" width=\"50%\"><a href=\"pass.php\">Changer mon password</a></td><td bgcolor=\"".next_color()."\">".$link1."</td></tr>";next_color();
   echo "<tr><td bgcolor=\"".next_color()."\"> </td><td bgcolor=\"".next_color()."\">".$link2."</td></tr>";next_color();
   echo "<tr><td bgcolor=\"".next_color()."\"><a href=\"logout.php\">Deconnexion</a></td>";
        echo "<td bgcolor=\"".next_color()."\"><a href=\"sup.php\">Effacer photo</a></td></tr>";
   
}
else{
   if(isset($_POST['login_login']) && isset($_POST['login_password'])){
    if(($user_id = find_user($_POST['login_login']))>=0)
     if(md5($_POST['login_password'])==$user[$user_id]['password']){
      $_SESSION['login'] = $user[$user_id]['login'];
      $_SESSION['password'] = $user[$user_id]['password'];
if($user_id>=0){
   if($user[$user_id]['level']==1){
      echo "<meta http-equiv=\"refresh\" content=\"1; url=server.php\">";
            
   }
   else{
        echo "<meta http-equiv=\"refresh\" content=\"2; url=index2.php?\">";
   echo display_table("Login",300);
   echo "<tr bgcolor=\"".next_color()."\"><td align=\"center\">Connexion réussi</td></tr>";
   echo "<tr bgcolor=\"".next_color()."\"><td align=\"center\"><a href=\"index2.php?\">Session Membre</a></td></tr>";
            echo display_table();
            include("footer.php");
            exit;
                           }
}
         }
         else
            echo display_error("Erreur identification",300);
      else
         echo display_error("Erreur identification",300);
   }
   echo "<center><h1>Connection Membre</h1></center>";
   echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">";
   echo display_table("Login",300);
   echo "<tr bgcolor=\"".next_color()."\"><td align=\"right\">Utilisateur</td><td width=\"200\"><input type=\"text\" name=\"login_login\" size=30 style=\"width:200px\"></td></tr>";
   echo "<tr bgcolor=\"".next_color()."\"><td align=\"right\">Mot de passe</td><td width=\"200\"><input type=\"password\" name=\"login_password\" size=30 style=\"width:200px\"></td></tr>";
   echo "<tr bgcolor=\"".next_color()."\"><td align=\"center\" colspan=\"2\"><input type=\"submit\" value=\"Envoyer\" class=\"button\"></td></tr>";
   echo display_table();
   echo "</form>";
}
include("footer.php");
?>


Pour les autre pages , par exemple la page server.php , qui contient le menu pour un utilisateur de niveau 2 ( admin chez moi)
d'ou le define("LEVEL",2); sinon c'a aurait etais define("LEVEL",1);
Code: Tout sélectionner
<?php
define("IN_SITE",true);
define("LEVEL",2);
include("header.php");
echo "<BR></BR>Coucou ",$_SESSION['login'],"";
echo display_table("Panneaux principale",300);
echo "<tr bgcolor=\"".next_color()."\"><a href=logout.php>Deconnexion</a></tr>";
echo display_table();
include("menu.php");
include("footer.php");
?>

ET dans ce server.php , j'ai
echo "<BR></BR>Coucou ",$_SESSION['login'],"";
qui affiche bien le login


Et pourquoi pas mon footer.php aussi :
Code: Tout sélectionner
<?php
if(!defined('IN_SITE'))die("pages non autorisées.");
?>
</td></tr></table>

</body>
</html>



J'espere qu'avec ca tu t'y retrouve , en tout cas je n'ais pas de probleme avec ce code

A toute.


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Re: Problème de session insoluble :-/ ?

Message le Dim Jan 31, 2010 16:49

merci .. t'inquiète je vais me le disséquer (c'est pas un paquet de code qui va me faire peur :-).

Ca va me décoincer parce que ma partie membre est quasi fini : me restait plus qu'a décoincer ce verrou ...


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Re: Problème de session insoluble :-/ ?

Message le Dim Jan 31, 2010 16:53

fullflash13 a écrit:ReSalut,

pour le md5 il existe des sites , qui te le déchiffre , grace a des grosses base de données qui contient les equivalences passe en clair et pass en md5 , comme celui la _http://www.authsecu.com/decrypter-dechiffrer-cracker-hash-md5/decrypter-dechiffrer-cracker-hash-md5.php

Bon ben qu'à cela ne tienne :

- Je vais introduire des modifs dans la chaine de chiffre MD5 (style ajouter des chiffres, style changer des chiffres, style permuter des chiffres)
- Ces changements n'étant connus que de moi
- donc la chaine md5 devient inexploitable

Ensuite quand je veux l'exploiter, j'ai plus qu'a dépolluer la chaine et rouler jeunesse :mrgreen: Non mais scrogneu de scrogneugneu :mrgreen:

Allez c'ets parti pour deux routines polluerMD5.php depolluerMD5.php :roll:


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Re: Problème de session insoluble :-/ ?

Message le Lun Fév 01, 2010 12:26

bon ben finalement, j'ai retenté de mettre le session start et la ca passe ... il devait y avoir un truc qui le derangeait et qui a sauté au gré des modifs ... donc ca marche : ma var est bien conservée.


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Re: Problème de session insoluble :-/ ?

Message le Lun Fév 01, 2010 14:07

Et du coup voila, les fonctions suivantes sont opérationnelles (sur mon www) :

- s'inscrire (avec la gestion des questions réponses anti spam, l'envoi d'email de confirmation etc), confirmer son inscription, annuler son inscription.

- se connecter
- se déconnecter
- déployer / contracter la zone membres (bon reste un bug lorsque l'on change de page, la zone membre ne reste pas dans son état)

les autres lien renvoient pour le moment sur une page en cours de réalisation

Si certains veulent jouer les beta testeurs :wink:

NB : autre truc pas au top : si vous faites une erreur (par exemple mauvaise reponse à l'anti spam, il ne conserve pas vos informations frappées ... ca va être fignolé dans la journée)


skyll
WRInaute passionné
WRInaute passionné
 
Messages: 1364
Inscription: 14 Oct 2005

Re: Problème de session insoluble :-/ ?

Message le Lun Fév 01, 2010 14:38

Zecat a écrit:Ensuite quand je veux l'exploiter, j'ai plus qu'a dépolluer la chaine et rouler jeunesse :mrgreen: Non mais scrogneu de scrogneugneu :mrgreen: Allez c'ets parti pour deux routines polluerMD5.php depolluerMD5.php :roll:


tu peut également regarder du côté de la "seed" à rajouter pour "poluer" ton md5 automatiquement :mrgreen:

Problème de session insoluble :-/ ?

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité