Problème de session insoluble :-/ ?

WRInaute accro
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:
<?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:
$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: )
 
WRInaute accro
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.
 
WRInaute accro
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 ...
 
Nouveau WRInaute
Donc ton problème vient de là :
Code:
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.
 
WRInaute accro
-amethyste- a dit:
Donc ton problème vient de là :
Code:
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:
<?

// 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:
 
Nouveau WRInaute
Zecat a dit:
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
 
WRInaute accro
fullflash13 a dit:
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 dit:
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.
 
Nouveau WRInaute
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:
<?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:
<?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:
<?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:
<?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:
<?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.
 
WRInaute accro
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 ...
 
WRInaute accro
fullflash13 a dit:
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:
 
WRInaute accro
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.
 
WRInaute accro
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)
 
WRInaute passionné
Zecat a dit:
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:
 
WRInaute accro
skyll a dit:
Zecat a dit:
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:
je vois pas trop ca que ca m'apporte. ca me donne un nombre aleatoire mais a moi de toute façon d'aller polluer mon MD5 avec ce nombre. Ou alors j'ai pas tout compris.
 
WRInaute passionné
me suis mal exprimé :mrgreen:
plutot que de chambouler ton md5 dans tous les sens (quoique ca marche aussi), tu peut également utiliser un mot de passe à toi + l'id unique de l'inscrit comme ca, 2 inscrits avec le même mot de passe n'auront pas le même hash.

ca deviens vite indéchiffrable sans passer par un gros chambouletout :mrgreen:
 
WRInaute accro
Bon bon ... arbitrage : je vais garder mon option "chambouletout" mais en introduisant dans l'algo de "chamboulage" la valeur du timestamp ... comme ca quasiment zero risque (sauf a ce que 2 inscrits s'inscrivent à la meme seconde et en plus avec le même mot de passe). Et de toute façon même dans ce cas le MD5 chamboulé sera inexploitable.
 
Discussions similaires
Haut