Utilisation des cookies et sessions

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Utilisation des cookies et sessions

par (xgregx) » 08 oct. 2007, 15:30

ok, j'y suis et je vous en remercie!!

J'ai remplacé le code
// Vérification de l'autorisation
if (!$_SESSION["mat"]) {
       // Si l'utilisateur n'est pas autorisé il est reconduit
       // sur le formulaire d'identification
       header("Location: _cnx_error.php");
       die();
    }
par

Code : Tout sélectionner

session_start(); Require ("fnc.php"); DB_Con(); // On regarde si le cookie existe if(isset($_COOKIE["souvenir"])){ // Si le cookie existe on le lit $cook = explode('|',$_COOKIE["souvenir"]); $sq = "select * from gid_admin_users where admin_id = '$cook[0]' and admin_password = '$cook[1]' "; $rsq = mysql_query($sq); $nb = mysql_num_rows($rsq); $var = mysql_fetch_array($rsq); if ($nb != "1") { header( "Location: _cnx.php"); exit; } else{ // On renseigne la session avec les infos du Coockie $_SESSION["mat"] = $var["admin_user"]; $_SESSION["admin"] = TRUE; } } // Vérification de l'autorisation if (!$_SESSION["mat"]) { // Si l'utilisateur n'est pas autorisé il est reconduit // sur le formulaire d'identification header("Location: _cnx_error.php"); die(); } [php] Voilà, SI j'ai le cookie, je remplis la session et ma page s'affiche. SI il n'y a pas de Cookie, je teste la session et ma page s'affiche. SI rien du tout, on va à l'erreur.[/php]

par Invité » 08 oct. 2007, 15:06

Ok, merci.

Bon tout ça foncitonne bien...

Cependant, j'avais un code du genre
if (!$_SESSION["mat"]) {
       // Si l'utilisateur n'est pas autorisé il est reconduit
       // sur le formulaire d'identification
       header("Location: _cnx_error.php");
       die();
    }
en "entête" de chaque page de ma partie admin.

Si je comprends l'esprit du code, je n'ai plus qu'à appeler le fichier contenant l'algo décrit ci-dessus?

par Tracker » 08 oct. 2007, 14:50

Par contre, je ne vois pas comment récupére l'info de la session en cours:
if $_SESSION[$userinfo] 
Je modifie un peu (même si c'est strictement symbolique), ça répondra peut-être à ta question:
session_start(...)
if $_SESSION['userinfo']
   redirect admin.php
   exit

if $_COOKIE['userinfo']
   $userinfo = FromCookie($_COOKIE['userinfo'])
   if get_auth($userinfo)
      $_SESSION['userinfo'] = $userinfo
      redirect admin.php
   else redirect _cnx.php
   exit

if $_POST['userinfo']
   $userinfo = FromPost($_POST['userinfo'])
   if get_auth($userinfo)
      $_SESSION['userinfo'] = $userinfo
      if $_POST["cookie"]=='on'
         setcookie(ToCookie($userinfo))
      redirect admin.php
   else redirect _cnx.php
   exit
Tu dois même encore pouvoir simplifier les parties traitant le _COOKIE et le _POST étant quasiment similaires...

par xgregx » 08 oct. 2007, 13:54

Par contre, je ne vois pas comment récupére l'info de la session en cours:
if $_SESSION[$userinfo] 

par Invité » 08 oct. 2007, 13:05

Merci pour vos réponses, j'étais en train de poser le problème sur papier car en effet, je suis reparti avec du code que j'avais déjà écris et donc, la visibilité n'y étais pas!

Je regarde ça et je vous fais un retour.

par Tracker » 08 oct. 2007, 12:01

En plus ton algo est compliqué, et pas forcement logique.

tu devrais avoir un schéma de ce type:
if $_SESSION[$userinfo]
   redirect admin.php
   exit

if $_COOKIE[$userinfo]
   if get_auth($_COOKIE[$userinfo])
      $_SESSION[$userinfo] = $_COOKIE[$userinfo]
      redirect admin.php
   else redirect _cnx.php
   exit

if $_POST[$userinfo]
   if get_auth($_POST[$userinfo])
      $_SESSION[$userinfo] = $_POST[$userinfo]
      if $_POST["cookie"]=='on'
         setcookie($_POST[$userinfo])
      redirect admin.php
   else redirect _cnx.php
   exit

par Ryle » 08 oct. 2007, 11:47

Lorsque tu trouves le cookie, tu rediriges l'admin vers sa page, mais tu ne mets rien en session ?

Par ailleurs, ajoute un exit() après un header("Location"). En effet, php continue d'exécuter le code après le header et tu peux te retrouver avec des valeurs bizare en session ou cookie. Avec le exit() tu es sur que php fait le redirection immédiatement.

Et un isSet() pour vérifier l'existance de $_COOKIE["souvenir"] avant de l'utiliser :)

Utilisation des cookies et sessions

par xgregx » 08 oct. 2007, 11:06

Bonjour à tous,

J'ai créé un site avec un espace admin.
J'y ai ajouté des jolies sessions qui fonctionnent bien.
Pour le confort des admi, j'aimerais ajouter une possibilité de rester connecté pendant plusieurs jours d'affilée (bypass de l'authetification), du coup, un petit coup de cookie en plus et c'est là que je commence à nager dans la panade!

J'arrive bien à créer mon cookie.
Il est là, je le vois, je le lis.

Mais je n'arrive pas à passer outre le formulaire d'authentification. J'essaie de vous donner un bout de code allégé en matière grasse:
$cook = $_COOKIE["souvenir"];

// On regarde si le cookie existe
if($cook){
	// Si le cookie existe on le lit

	$cook = explode('|',$cook);
		
	$sq = "select * from admin_users where admin_id = '$cook[0]' and admin_password = '$cook[1]' ";
	$rsq = mysql_query($sq);
	$nb = mysql_num_rows($rsq);
	// Si les informations sont correctes on ouvre la session		
		header( "Location: admin.php");	
	
		}
// Si le ccokie n'existe pas on affiche le formulaire	
else{
		
/*--------------------------------------------------------------------
			Gestion des cookie
--------------------------------------------------------------------*/

// si on a coché 'se souvenir de moi'
if(!empty($_POST['cookie'])){

	if ((!empty($_POST['mat'])) && (!empty($_POST['pass'])) ) {
	
		$pass = $_POST["pass"];
		$mat = $_POST["mat"];

		$ck = Get_Auth($mat,$pass);

		// On vérifie que le couple id / mdp est correct
		if ($ck == "1") {$loginOK = true;}


			// Si le login a été validé on met les données en sessions
			if ($loginOK) {
				$pass= md5($pass);
				$sql = "select admin_id from admin_users where admin_user = '$mat' and admin_password = '$pass'";
				$rsql = mysql_query($sql);
				$var = mysql_fetch_array($rsql);
				$mat = $var["admin_id"];
				
				$var_cookie	= $mat."|".$pass ;
				$expire = 365*24*3600;  // on définit la durée du cookie, 1 an
				setcookie("souvenir",$var_cookie,time()+$expire);  // on l'envoi
			}
	}

}


/*--------------------------------------------------------------------
			Gestion de la session
--------------------------------------------------------------------*/
session_start();
$loginOK = false;  // cf Astuce

if ((!empty($_POST['mat'])) && (!empty($_POST['pass'])) ) {

		$pass = $_POST["pass"];
		$mat = $_POST["mat"];

		$ck = Get_Auth($mat,$pass);

		// On vérifie que son mot de passe est correct
		if ($ck == "1") {$loginOK = true;}


		// Si le login a été validé on met les données en sessions
		if ($loginOK) {
		  $_SESSION["mat"] = $mat;
		  $_SESSION["admin"] = TRUE;

		header( "Location: admin.php");
		}else {header( "Location: _cnx.php");}


}
else {header( "Location: _cnx.php");}


			
}// fin si cookie