Petites sessions en php

Résolu/Fermé
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 - 16 mai 2008 à 13:27
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 - 21 mai 2008 à 18:45
Bonjour,

Voila. Je voudrait faire une sorte de "mini-session" sur un de mes sites. Le principe est le suivant, 2pages:
-index.php, qui contient un formulaire demandant le nom et le mot de pass;
-index2.php, la page ou est redirigé le visiteur quand son identification est correcte.

J'aimerais que ce script soit sécurisé : si un visiteur tape "index2.php" dans la barre d'adresse, il est redirigé vers l'index car il ne s'est pas identifié. A l'inverse, une foi identifié, il doit pouvoir cliquer sur un lien "index2.php" et arriver sur cette page.

Je précise qu'étant débutant, je souhaiterais ne pas avoir à utiliser MySQL, car je ne sait pas m'en servir. Je voudrais seulement un script du style :

index.php :
Si nom_du_visiteur1 = $nom1 && MDP1 = $mdp1 OU nom_du_visiteur2 = $nom2 && MDP2 = $mdp2 OU [etc...]{
redirection vers index2.php; }
Sinon {
//on affiche la page du formulaire en HTML
}


index2.php :
Le visiteur est identifié ?
Si oui {
//on affiche la page en HTML
}
Sinon {
redirection vers index2.php
}


Merci d'avance pour vos réponses, car j'ai beau esseyé de trouver, je n'y arrive pas.
A voir également:

18 réponses

dans ton idex2, tu met if(!isset($_session['login']))(include(index.php)); else exit
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
16 mai 2008 à 13:32
OK, merci. Et pour la premiére partie ?
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
16 mai 2008 à 13:47
UP :)
0
inuman Messages postés 19 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 16 mai 2008
16 mai 2008 à 14:00
Salut,
j'ai quelque petite questions:
ou stocke tu les mot de passe et login parce que si l'utilisateur doit s'enregistrer pour avoir accès a la fameuse page et a chaque fois devoir se réenregistrer pour reavoir accès a ta page a mon avis ça aura le dont d'énerver l'utilisateur.

sinon ça donne ça

tu as normalement un input dans un formulaire pour saisir le nom et le mot de passe et un bouton valider (ton formulaire doit être en méthode POST)

ça donne donc if(($_POST['login']==$nom1) &&($_POST['mdp']==$mdp1))
{
header("location: /index2.php"); /*include sert si tu redirige par exemple dans un div*/
}
else
{
header("location: /index1.php"); /*la tu reviens a ta première page
}

si tu veut contrôler que tes champ ont été replis tu contrôle avec if(!empty($_POST['login']))
qui veut dire en bon français si ton champ est pas vide alors tu fait le reste
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
18 mai 2008 à 21:29
Mes mot de passe ne sont stocké nul part... En fait, c'est un tout petit site, avec genre 5 personnes, et chacune ont un Prénom, et le mot de pass est le même pour tous. C'est un site privé...
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
18 mai 2008 à 23:37
Bsr

Voici un petit exemple :

liste_users.php

<?php
$valid_passwords = array();
$valid_passwords["hack"] = "net";
$valid_passwords["super"] = "mario";
$valid_passwords["php"] = "php";
$valid_users = array_keys($valid_passwords);

function check($user, $pass)
{
	global $valid_passwords,$valid_users;
	return (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
}
?>



Dedans tu ajoutes tes autres utilisateurs


index1.php


<?php
session_start();
include("liste_users.php");

// Si demande de déconnexion explicite on efface la session
if (isset($_POST['deconnexion']) && ($_POST['deconnexion']=='1'))
{
	session_unset(); 
}

// On teste d'abord si les identifiants sont dans la session
$user = isset($_SESSION['user']) ?  $_SESSION['user'] : null;
$pass = isset($_SESSION['pass']) ? $_SESSION['pass'] : null;

$ok = check($user,$pass);
if (!$ok)
{
	session_unset(); 
	
	$user = isset($_POST['user']) ?  $_POST['user'] : null;
	$pass = isset($_POST['pass']) ? $_POST['pass'] : null;

	$ok = check($user,$pass);
	if ($ok)
	{
		$_SESSION['user'] = $user;
		$_SESSION['pass'] = $pass;
	}
}	

if ($ok) 
{
	// Il faut une url absolue pour la redirection
	$url = "http://" . $_SERVER['HTTP_HOST']
		. rtrim(dirname($_SERVER['PHP_SELF']), '/\\')
		. "/" . "index2.php";
	header("Location: $url");	
	exit;
}	
?>
<html>
<body>
Pour continuer veuillez d'abord vous identifiez svp
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" method="post">
<table>
<tr>
<td>Utilisateur</td>
<td><input type="text" id="user" name="user" value=""></td>
</tr>
<tr>
<td>Mot de passe</td>
<td><input type="password" id="pass" name="pass" value=""></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Connexion"></td>
</tr>
</table>
</form>  
</body>
</html>



index2.php
<?php
session_start();
include("liste_users.php");

// On teste d'abord si les identifiants sont dans la session
$user = isset($_SESSION['user']) ?  $_SESSION['user'] : null;
$pass = isset($_SESSION['pass']) ? $_SESSION['pass'] : null;

$ok = check($user,$pass);
if (!$ok) 
{
	session_unset(); 
	// Il faut une url absolue pour la redirection
	$url = "http://" . $_SERVER['HTTP_HOST']
		. rtrim(dirname($_SERVER['PHP_SELF']), '/\\')
		. "/" . "index1.php";
	header("Location: $url");	
	exit;
}	
?>
<html>
<body>
Bienvenu <?php echo $user;?> sur l'espace sécurisé
<form action="index1.php" method="post">
<input type="hidden" value="1" name="deconnexion">
<input type="submit" value="Déconnexion">
</form>
</body>
</html>


Copie ces 3 fichiers sous le même répertoire avec les noms ci-dessus

Attention ! si tu changes le nom des pages modifies également les noms dans les includes et les redirections

Voilà
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
19 mai 2008 à 09:40
Super sympa, merci a tous !!!!!!!

VIVE LE PHP !
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
19 mai 2008 à 09:45
Attend, il y a une erreure !
"
Warning: Cannot modify header information - headers already sent by (output started at /www/bordinfo/test/protec_test/liste_users.php:1) in /www/bordinfo/test/protec_test/index1.php on line 37
"

Qu'est-ce que cela signifit ?
J'ai bien modifier l'url, mais rien y change ! HELP !
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
19 mai 2008 à 17:01
Bjr

Que tu as envoyé autre chose qu'un header() avant la ligne 37 par ex un echo "..."

Poste la code de ta page
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
20 mai 2008 à 14:05
Voici le code source :

index1.php (formulaire)
<?php
session_start();
include("liste_users.php");

// Si demande de déconnexion explicite on efface la session
if (isset($_POST['deconnexion']) && ($_POST['deconnexion']=='1'))
{
	session_unset(); 
}

// On teste d'abord si les identifiants sont dans la session
$user = isset($_SESSION['user']) ?  $_SESSION['user'] : null;
$pass = isset($_SESSION['pass']) ? $_SESSION['pass'] : null;

$ok = check($user,$pass);
if (!$ok)
{
	session_unset(); 
	
	$user = isset($_POST['user']) ?  $_POST['user'] : null;
	$pass = isset($_POST['pass']) ? $_POST['pass'] : null;

	$ok = check($user,$pass);
	if ($ok)
	{
		$_SESSION['user'] = $user;
		$_SESSION['pass'] = $pass;
	}
}	

if ($ok) 
{
	// Il faut une url absolue pour la redirection
	$url = "http://bordinfo.olympe-network.com/test/protec_test/" . $_SERVER['HTTP_HOST']
		. rtrim(dirname($_SERVER['PHP_SELF']), '/\\')
		. "/" . "index2.php";
	header("Location: $url");	
	exit;
}	
?>
<html>
<body>
Pour continuer veuillez d'abord vous identifiez svp
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" method="post">
<table>
<tr>
<td>Utilisateur</td>
<td><input type="text" id="user" name="user" value=""></td>
</tr>
<tr>
<td>Mot de passe</td>
<td><input type="password" id="pass" name="pass" value=""></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Connexion"></td>
</tr>
</table>
</form>  
</body>
</html>


index2.php (page d'arrivée)
<?php
session_start();
include("liste_users.php");

// On teste d'abord si les identifiants sont dans la session
$user = isset($_SESSION['user']) ?  $_SESSION['user'] : null;
$pass = isset($_SESSION['pass']) ? $_SESSION['pass'] : null;

$ok = check($user,$pass);
if (!$ok) 
{
	session_unset(); 
	// Il faut une url absolue pour la redirection
	$url = "http://bordinfo.olympe-network.com/test/protec_test/" . $_SERVER['HTTP_HOST']
		. rtrim(dirname($_SERVER['PHP_SELF']), '/\\')
		. "/" . "index1.php";
	header("Location: $url");	
	exit;
}	
?>
<html>
<body>
Bienvenu <?php echo $user;?> sur l'espace sécurisé
<form action="index1.php" method="post">
<input type="hidden" value="1" name="deconnexion">
<input type="submit" value="Déconnexion">
</form>
</body>
</html>


liste_user.php
 <?php
$valid_passwords = array();
$valid_passwords["hack"] = "net";
$valid_passwords["super"] = "mario";
$valid_passwords["php"] = "php";
$valid_users = array_keys($valid_passwords);

function check($user, $pass)
{
	global $valid_passwords,$valid_users;
	return (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
}
?>


Merci d'avance pour vos réponses...
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
20 mai 2008 à 15:28
brj

T'Oh ! (_8(|)

Remplace

if ($ok) 
{
	// Il faut une url absolue pour la redirection
	$url = "http://bordinfo.olympe-network.com/test/protec_test/" . $_SERVER['HTTP_HOST']
		. rtrim(dirname($_SERVER['PHP_SELF']), '/\\')
		. "/" . "index2.php";
	header("Location: $url");	
	exit;
}


par

if ($ok) 
{
	// Il faut une url absolue pour la redirection
	$url = "http://bordinfo.olympe-network.com/test/protec_test/index2.php";
	header("Location: $url");	
	exit;
}


idem pour index1 et ça devrait mieux fonctionner ;-)

Je t'invite également à te documenter sur les variables superglobales renvoyées par
$_SERVER[] ici http://fr.php.net/manual/fr/reserved.variables.server.php
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
20 mai 2008 à 17:34
Tjrs le même message d'erreur ! :(

HELP !
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
20 mai 2008 à 18:22
Vérifie que dans chacun de tes fichiers tout au début qu'avant la balise <?php tu n'as pas laissé un ou plusieurs espaces

<?php doit être au tout début et rien d'autre avant
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
20 mai 2008 à 18:31
Merci php, en fait il y avai un espace devan <?php de unser_liste.php.

Tout marche, merci à tous, mais juste une derniére question (oui je suis chient), pourquoi qand les identifiants sont correct, index2.php se transforme en "http://bordinfo.olympe-network.com/test/protec_test/index2.phpbordinfo.olympe-network.com/test/protec_test/index2.php" ???
Seul index2.php devrais figurer...

Merci d'avance...
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
20 mai 2008 à 21:09
héhéhé l'erreur classique (je l'ai faite aussi au début alors hein on se moque pas non mais ! ;-)


Pour l'adresse tu dois avoir une erreur dans ton code soit au niveau de tes header("Location ...") soit dans le code de ta page index2.php dans d'autres includes dont tu te sers peut être


C'est quoi le code exact de ta page index2.php ?
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
20 mai 2008 à 21:24
Le code de index2.php ne t'aprendra pas grand chose, mais le voici :
<?php
session_start();

if(!isset($_session['login']))(include(index.php)); else exit
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Bienvenue !</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
</head>
<body>
<h1>TADA !</h1>
</body>
</html>


Quand a index1.php le RE, RE, RE, RE voici :) :
<?php
session_start();
include("liste_users.php");

// Si demande de déconnexion explicite on efface la session
if (isset($_POST['deconnexion']) && ($_POST['deconnexion']=='1'))
{
	session_unset(); 
}

// On teste d'abord si les identifiants sont dans la session
$user = isset($_SESSION['user']) ?  $_SESSION['user'] : null;
$pass = isset($_SESSION['pass']) ? $_SESSION['pass'] : null;

$ok = check($user,$pass);
if (!$ok)
{
	session_unset(); 
	
	$user = isset($_POST['user']) ?  $_POST['user'] : null;
	$pass = isset($_POST['pass']) ? $_POST['pass'] : null;

	$ok = check($user,$pass);
	if ($ok)
	{
		$_SESSION['user'] = $user;
		$_SESSION['pass'] = $pass;
	}
}	

if ($ok) 
{
	// Il faut une url absolue pour la redirection
	$url = "http://bordinfo.olympe-network.com/test/protec_test/index2.php" . $_SERVER['HTTP_HOST']
		. rtrim(dirname($_SERVER['PHP_SELF']), '/\\')
		. "/" . "index2.php";
	header("Location: $url");	
	exit;
}	
?>
<html>
<body>
Pour continuer veuillez d'abord vous identifiez svp
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" method="post">
<table>
<tr>
<td>Utilisateur</td>
<td><input type="text" id="user" name="user" value=""></td>
</tr>
<tr>
<td>Mot de passe</td>
<td><input type="password" id="pass" name="pass" value=""></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Connexion"></td>
</tr>
</table>
</form>  
</body>
</html>


Voila. Une solution ?
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
20 mai 2008 à 21:32
Au risque de me rééééééééééééééééééééééépéter ce code ci-dessous est faux !!!!!

if ($ok) 
{
	// Il faut une url absolue pour la redirection
	$url = "http://bordinfo.olympe-network.com/test/protec_test/index2.php" . $_SERVER['HTTP_HOST']
		. rtrim(dirname($_SERVER['PHP_SELF']), '/\\')
		. "/" . "index2.php";
	header("Location: $url");	
	exit;
}



Il faut le remplacer par :

if ($ok) 
{
	// Il faut une url absolue pour la redirection
	$url = "http://bordinfo.olympe-network.com/test/protec_test/index2.php";
	header("Location: $url");	
	exit;
}


Si tu codes directement l'url absolue en "dur" tu n'as pas besoin de reconstruire l'url à partir de la position de la page
actuelle en utilisant les variables $_SERVER[]

Décidément t'es dur à convaincre D'Oh ! (j'adore les Simpsons)
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
21 mai 2008 à 11:54
Désolé, autant pour moi... mais ya tjrs ce PB... Tu parle de quelle page ? index.php ? Si c'est le cas, ya toujours cette adresse : http://bordinfo.olympe-network.com/test/protec_test/bordinfo.olympe-network.com/test/protec_test/index2.php

Une correction ?
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
21 mai 2008 à 17:37
Bonjour

Dans toutes les pages où tu as mis un header() supprime les références au tableau $_SERVER
et écrit directement

	$url = "http://bordinfo.olympe-network.com/test/protec_test/######.php";
	header("Location: $url");


En remplacant ###### par le véritable nom de ta page

Maintenant si l'adresse que tu cites fonctionne (ce qui semble apparemment le cas) alors tu as dû créer ce chemin pour le moins compliqué sur le serveur de ton hébergeur autrement tu aurais une erreur page not found

Contrôle en te connectant par FTP que tous est correcte
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
21 mai 2008 à 18:45
C'étai déjà comme ca... Mais bon tan pis, je vous ai tous assez emmerdé comme ça, je clot le sujet et je vérais ça plus tard.

Merci à tous...
0