8795 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Voilà j'ai un petit soucis pour créer des sessions qui ont pour but de protéger des pages qui demande une authentification... J'arrive à créer la session quand l'utilisateur a rentrée le bon mot de passe et le bon pseudo, seulement après je voudrais dire que si la session existe il reste sur la page suivante sinon il renvoie sur la page de connexion.

Moi ça ne marche pas, j'ai beau avoir rentrée le bon pseudo et le bon mot de pass mais ça me renvoie tout le temps sur la page de connexion lorsque j'actualise.

Ma page HTML


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
	<link rel="stylesheet" media="screen" href="style/style.css" />
	<script type="text/javascript" src="script/script.js"></script>	
</head>
<body>
<form method="post" action="" name="indexFormConnexion">
<label>Pseudo</label><br />
<input type="text"/><br/><br />
<label>Password</label><br />
<input type="password"/><br/><br />
<input type="submit" value="Enregistrer"/>
</form>
<div id="erreur" style="color: white; display: none; margin: 10px 0px 0px 2px;"></div>
</body>
</html>


Ma page Javascript


	$("form[name=indexFormConnexion]").submit( function(){
		var login = $("form[name=indexFormConnexion] input[type=text]").val();
		var pass = $("form[name=indexFormConnexion] input[type=password]").val();
		$.ajax({
			type: "POST",
			url: "authentification.php",
			data: "login="+login+"&pass="+pass,
			success: function(data){
				if ( data == "true" ){
					$("div#erreur").html("<img id=\"loader\" src=\"img/loader.gif\"/>");
					document.location.href = "squelettor.php";
				}
				if ( data == "false" ){
					$("div#erreur").fadeIn();
					$("div#erreur").html("Erreur de connexion !");
					$("form[name=indexFormConnexion] input[type=text]").val("");
					$("form[name=indexFormConnexion] input[type=password]").val("");
				}
			}
		});
		return false;
	});


Ma page d'authentification


<?php
session_start();

$login = $_POST['login'];
$pass = $_POST['pass'];

if ( $login == "**********" && $pass == "**********" ){
	echo"true";
	$_SESSION['login'] = $login;
	$_SESSION['pass'] = $pass;
}else{
	echo"false";
}


?>


Une des page qui vérifie si la session existe


<?php
session_start();
if ( isset($_SESSION['login']) ){
	include('include/header.php');
	include('include/navigation.html');
	include('include/outilSquelettor.html');
	include('include/footer.php');
}else{
	header("Location: index.php");
}
?>


Moi ça me redirige tout le temps sur l'index lorsque j'actualise, même si il y a 5 seconde à peine j'ai rentrée les bon accès...

J'ai mis les accès en dur pour tester, après ils seront dans un fichier.
Modifié par tonymx15 (27 Jan 2011 - 16:23)
Salut,
Déjà un truc qui me parait bizarre c'est ton formulaire html... Il me semble que les variables $_POST que récupère php sont basée sur l'attribut name="blabla" de tes champs input.
Donc si par exemple tu as ça en html :
<input name="password" type="password"/>

Tu récupère ça en php :
$_POST['password']

Or là je vois pas de champs name dans tes balises input ?!
J'utilise la fonction $.ajax pour les POST...


$.ajax({ 
   type: "POST", 
   url: "authentification.php", 
   data: "login="+login+"&pass="+pass, 
   success: function(data){ 
  } 
});


"$_POST['login']" et "$_POST['pass']" sont les post que $.ajax envoie à "authentification.php".

Ce que je trouve bisare c'est que je me connecte ça marche, ça me lance la première page, j'actualise ça revient sur la connexion alors que je viens de la faire comme si lorsque j'actualiser les sessions se vider...
Bon j'avais pas vu le fichier JS qui à l'air de remplir cette fonction via ajax. Mais tu devrais quand même mettre tes name="" dans le html pour la poignée d'utilisateur n'ayant pas javascript.

D'habitude je ne met le session start que si le login et pass sont bons (sur la page authentification dans le if tout en haut) mais je sais pas si ça changerai qqch à vrai dire.
A quel moment ça te renvoie sur index ? Tu vois apparaître true ou false d'abord ?
En fait ça ne te renvoie sur index que si tu actualises ? sinon ça marche normal c'est bien ça ?

Essaye de faire un echo des variables de sessions voir ce qu'elles contiennent. Tu n'aurais pas mis de session destroy qqpart des fois ?

Et dans ton(tes) fichier qui vérifie si la session est ok tu devrais vérifier au moins 2 var :
1 si isset login
2 si isset password

Voire 3
3 si auth (= si password et login se correspondent et correspondent bien à qqn dans la base)
Je viens de trouver le problème, ton dernier message confirme ce que je viens de trouver.

dans "include('include/header.php');" j'avais un "session_unset();" ce qui me détruiser toutes les sessions, cependant j'en est besoin pour une autre page donc maintenant j'ais fais "unset($SESSION['session1'])" pour celle que je veux supprimer...

;)

Merci
Modifié par tonymx15 (27 Jan 2011 - 17:16)