Deprecated: Function session_is_registered()

Bonjour,

je créer actuellement mon site et j'ai un message d'erreur : "Deprecated: Function session_is_registered() is deprecated in" qui a la base n'apparais pas sur mon serveur free.
enfaite cette page et un volet qui et en include dans ma page index.php.

voici le script :

<div id="volet">
<?php
if (session_is_registered("authentification") && $_SESSION['privilege'] == "admin"){ ?>
<div id="volet1">
<a href="index.php?page=2">- menu1</a><br />
<a href="index.php?page=5">- menu1</a><br />
</div>
<div id="volet2">
<a href="index.php?page=30">- menu1</a><br />
<a href="index.php?page=13">- menu1</a><br />
<a href="index.php?page=12">- menu1</a><br />
<a href="index.php?page=35">- menu1</a><br />
</div>
<?php
}
else {
?>
<div id="identif">
<form method="post" action="traitement1.php">
<p>
<input type="text" name="login" id="login" value="Identifiant" onfocus="if(this.value=='Identifiant')this.value='';" onblur="if(this.value=='')this.value='Identifiant';"/>
<input type="password" name="pass" id="pass" value="Mot de passe" onfocus="if(this.value=='Mot de passe')this.value='';" onBlur="if(this.value=='')this.value='Mot de passe';"/>

<input type="submit" value="s'identifier" /></p>
</form>
</div>
<div id="volet1">
<a href="index.php?page=2">- menu1</a><br />
<a href="index.php?page=5">- menu1</a><br />
</div>
<div id="volet2">
<a href="index.php?page=30">- menu1</a><br />
<a href="index.php?page=13">- menu1</a><br />
<a href="index.php?page=12">- menu1</a><br />
<a href="index.php?page=35">- menu1</a><br />
</div>
<?php } ?>
</div>

merci pour votre aide

20 réponses

Résumé de la discussion

Un fil porte sur une erreur PHP concernant la dépréciation de session_is_registered() et son impact sur une page incluant un volet dans index.php, avec gestion des sessions et des privilèges. Plusieurs réponses évoquent que $_SESSION['privilege'] peut être indéfini, que session_is_registered est obsolète, et recommandent de démarrer la session avec session_start() et de vérifier l'existence des variables via isset. D'autres expliquent que la variable $utilisateur définie sur index.php n'est pas accessible depuis volet.php, d'où l'usage recommandé des $_SESSION et d'un appel à session_start() avant les inclusions. En complément, plusieurs intervenants suggèrent d'éviter les méthodes MySQL obsolètes et MD5 pour l'authentification, et d'utiliser des standards modernes (MySQLi/PDO, alternatives de hachage) afin d'améliorer la sécurité et la maintenance.

Bobot (l’IA à votre service)
  1. Bonjour,
    Deprecated signie que la "fonction" utilisée est obsolète,
    Maintenant il faut utiliser ceci :
    <?php
    session_start();
    $_SESSION['bidule'] = "Bidule";
    ?>
    

    1. en effectuant cela j'ai cette erreur :
      Notice: A session had already been started - ignoring session_start() in

      Notice: Undefined index: privilege in

      <?php
      session_start();

      if ($_SESSION['privilege'] == "admin"){ ?>
      <div id="volet">
      <div id="volet1">
      <a href="index.php?page=2">- menu1</a><br />
      <a href="index.php?page=5">- menu1</a><br />
      </div>
      <div id="volet2">
      <a href="index.php?page=30">- menu1</a><br />
      <a href="index.php?page=13">- menu1</a><br />
      <a href="index.php?page=12">- menu1</a><br />
      <a href="index.php?page=35">- menu1</a><br />
      </div>
      </div>
      <?php
      }
      else {
      ?>
      1. Cela signifie qu'un session_start() est déjà ouvert, donc tu l'ouvres deux fois...
        Cette page est-elle apellé dans une autre page ? (ce qui pourrait causé le souci de deux session_start() ouvert
    2. oui effectivement sur la page index.php j'include cette page.
      donc je supprime session_start
      1. apres suppression de session_start je me retrouve avec l'erreur suivant :
        Notice: Undefined index: privilege in
        1. Apparement il ne retrouve pas ta session appellé privilege,
          Sur quelle page lui donnes-tu une valeur ?
      2. je donne une valeur sur la page index.php

        <?php require ("include/connexion.php"); ?>
        <?php

        session_start();

        if (isset($_POST['login'])){
        $login = $_POST['login'];
        $pass = md5($_POST['pass']);

        mysql_select_db($base, $db);
        $verif_query=sprintf("SELECT * FROM utilisateurs WHERE login='$login' AND pass='$pass'");
        $verif = mysql_query($verif_query, $db) or die(mysql_error());
        $row_verif = mysql_fetch_assoc($verif);
        $utilisateur = mysql_num_rows($verif);

        if ($utilisateur) {
        session_register("authentification");

        $_SESSION['niveau'] = $row_verif['niveau'];
        $_SESSION['privilege'] = $row_verif['privilege'];
        $_SESSION['nom'] = $row_verif['nom'];
        $_SESSION['prenom'] = $row_verif['prenom'];
        $_SESSION['login'] = $row_verif['login'];
        $_SESSION['pass'] = $row_verif['pass'];

        header("Location:index.php?page=11");
        }
        else {
        header("Location:index.php?page=7");
        }
        }

        if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout'){
        $prenom = $_SESSION['prenom'];
        session_unset("authentification");
        header("Location:index.php?page=10");
        }
        ?>
        1. Tu as deux fois l'ouverture de la balise php
          Sinon sur cette page essayes de faire un echo de ta session ;)
          1. mais en faite je ne comprends pas car en faite $_session privilége n'a pas de valeur car $utilisateur n'existe pas.
            apres verification de l'ID et du passe $_session privilége et générer avec les infos dans la base MYSQL
            1. Donne moi le lien entre les deux pages que tu viens de me donner
          2. effectivement $_session privilége me renvoi cela : Notice: Undefined index: privilege in
            1. mais comme je mets $_session privilége avec un if et puis un else donc normalement comme $_session privilége n'existe pas il devrait lancer le else.
              1. Mysql_num_rows compte le nombre de résultat généré par une requête,
                et toi tu fais
                if($utilisateur)
                Met lui une valeur !
                1. enfaite je compte le nombre de résultat.
                  tu pense que je devrais mettre un mysql_fetch_assoc au lieu de mysql_num_rows??
                  1. mysql_num_rows compte le nombre de résultats d'une requete, tandis que le mysql_fetch_assoc te met les résultats dans un tableau assocatif,
                    Donc je ferais un truc du genre :
                    $verif_query=sprintf("SELECT * FROM utilisateurs WHERE login='$login' AND pass='$pass'");
                    $verif = mysql_query($verif_query, $db) or die(mysql_error());
                    $row_verif = mysql_fetch_assoc($verif);
                    $utilisateur = mysql_num_rows($verif); 
                    if($utilisateur == 1)
                    {
                    echo "identifiants ok";
                    }
                    else
                    {
                    echo "identifiant pas ok";
                    }
                    Si ta requete dégage un résultat cela veut dire que l'utilisateur existe dans la base de données, si elle dégage aucun résultats cela veut dire que l'utilisateur n'existe pas
                    
                2. J'ai mis ce code dans mon volet :

                  if($utilisateur == 1)
                  {
                  echo "identifiants ok";
                  }
                  else
                  {
                  echo "identifiant pas ok";
                  }
                  mais il m'indique cette erreur :
                  Notice: Undefined variable: utilisateur in
                  1. Fais comme ceci :
                    $verif_query=("SELECT * FROM utilisateurs WHERE login='$login' AND pass='$pass'");
                    $verif = mysql_query($verif_query) or die(mysql_error());
                    $utilisateur = mysql_num_rows($verif); 
                    if($utilisateur == 1)
                    {
                    echo "identifiants ok";
                    }
                    else
                    {
                    echo "identifiant pas ok";
                    }
                    
                    
                    
                3. ok je mets quoi sur la page index.php :
                  <?php require ("include/connexion.php");

                  session_start();

                  if (isset($_POST['login'])){
                  $login = $_POST['login'];
                  $pass = md5($_POST['pass']);

                  mysql_select_db($database_dbprotect, $dbprotect);
                  $verif_query=sprintf("SELECT * FROM utilisateurs WHERE login='$login' AND pass='$pass'");
                  $verif = mysql_query($verif_query, $dbprotect) or die(mysql_error());
                  $row_verif = mysql_fetch_assoc($verif);
                  $utilisateur = mysql_num_rows($verif);

                  if ($utilisateur) {
                  session_register("authentification");

                  $_SESSION['niveau'] = $row_verif['niveau'];
                  $_SESSION['privilege'] = $row_verif['privilege'];
                  $_SESSION['nom'] = $row_verif['nom'];
                  $_SESSION['prenom'] = $row_verif['prenom'];
                  $_SESSION['login'] = $row_verif['login'];
                  $_SESSION['pass'] = $row_verif['pass'];

                  header("Location:index.php?page=11");
                  }
                  else {
                  header("Location:index.php?page=7");
                  }
                  if(isset($_GET['erreur']) && ($_GET['erreur'] == "intru")) {
                  header("Location:index.php?page=8");
                  }
                  }

                  if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout'){
                  $prenom = $_SESSION['prenom'];
                  session_unset("authentification");
                  header("Location:index.php?page=10");
                  }
                  ?>

                  et je mets quoi sur le volet ? :

                  <?php

                  if($utilisateur == 1)
                  {
                  echo "identifiants ok";
                  }
                  else
                  {
                  echo "identifiant pas ok";
                  }
                  ?>

                  merci pour ton aide mais la je me perds dans le code ^^
                  1. tu vérifies pas si ta requete dégage un resultat !!
                    puis session_start(); doit etre la premiere ligne de code sur ta page !!!
                4. J'ai modifier session_start(); et je verifie car j'ai inserer la verification dans le volet et reviens en : identifiant pas ok
                  mais c'est normal vue que je ne m'identifie pas avec mon login et passe
                  1. Donc cela fonctionne ?
                5. ben non j'ai toujours une erreur :

                  Notice: Undefined variable: utilisateur in C:\EasyPHP5.3.0\www\bc\themes\volet.php on line 4
                  identifiant pas ok

                  ligne 4 : if($utilisateur == 1){
                  1. Montre ton code sinon je peux rien faire
                6. la page volet.php

                  <?php

                  if($utilisateur == 1)
                  {
                  echo "identifiants ok";
                  }
                  else
                  {
                  echo "identifiant pas ok";
                  }
                  ?>
                  <div id="volet">
                  <div id="volet1">
                  <a href="index.php?page=2">- menu1</a><br />
                  <a href="index.php?page=5">- menu1</a><br />
                  </div>
                  <div id="volet2">
                  <a href="index.php?page=30">- menu1</a><br />
                  <a href="index.php?page=13">- menu1</a><br />
                  <a href="index.php?page=12">- menu1</a><br />
                  <a href="index.php?page=35">- menu1</a><br />
                  </div>
                  </div>

                  <div id="identif">
                  <form method="post" action="traitement1.php">
                  <p>
                  <input type="text" name="login" id="login" value="Identifiant" onfocus="if(this.value=='Identifiant')this.value='';" onblur="if(this.value=='')this.value='Identifiant';"/>
                  <input type="password" name="pass" id="pass" value="Mot de passe" onfocus="if(this.value=='Mot de passe')this.value='';" onBlur="if(this.value=='')this.value='Mot de passe';"/>

                  <input type="submit" value="s'identifier" /></p>
                  </form>
                  </div>
                  <div id="volet1">
                  <a href="index.php?page=2">- menu1</a><br />
                  <a href="index.php?page=5">- menu1</a><br />
                  </div>
                  <div id="volet2">
                  <a href="index.php?page=30">- menu1</a><br />
                  <a href="index.php?page=13">- menu1</a><br />
                  <a href="index.php?page=12">- menu1</a><br />
                  <a href="index.php?page=35">- menu1</a><br />
                  </div>

                  </div>

                  -------------------------------------------------------------------------------------

                  la page index.php

                  <?php
                  session_start();

                  require ("include/connexion.php");

                  if (isset($_POST['login'])){
                  $login = $_POST['login'];
                  $pass = md5($_POST['pass']);

                  mysql_select_db($database_dbprotect, $dbprotect);
                  $verif_query=sprintf("SELECT * FROM utilisateurs WHERE login='$login' AND pass='$pass'");
                  $verif = mysql_query($verif_query, $dbprotect) or die(mysql_error());
                  $row_verif = mysql_fetch_assoc($verif);
                  $utilisateur = mysql_num_rows($verif);

                  if ($utilisateur) {
                  session_register("authentification");

                  $_SESSION['niveau'] = $row_verif['niveau'];
                  $_SESSION['privilege'] = $row_verif['privilege'];
                  $_SESSION['nom'] = $row_verif['nom'];
                  $_SESSION['prenom'] = $row_verif['prenom'];
                  $_SESSION['login'] = $row_verif['login'];
                  $_SESSION['pass'] = $row_verif['pass'];

                  header("Location:index.php?page=11");
                  }
                  else {
                  header("Location:index.php?page=7");
                  }
                  if(isset($_GET['erreur']) && ($_GET['erreur'] == "intru")) {
                  header("Location:index.php?page=8");
                  }
                  }

                  if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout'){
                  $prenom = $_SESSION['prenom'];
                  session_unset("authentification");
                  header("Location:index.php?page=10");
                  }
                  ?>
                  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                  <html xmlns="http://www.w3.org/1999/xhtml">
                  <head>
                  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                  <title>en développement</title>
                  <link href="css/styles.css" rel="stylesheet" type="text/css" />
                  <script type="text/javascript" src="zoombox/jquery.js"></script>
                  <script type="text/javascript" src="zoombox/zoombox.js"></script>
                  <script type="text/javascript">
                  <!--
                  function MM_swapImgRestore() { //v3.0
                  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
                  }
                  function MM_preloadImages() { //v3.0
                  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
                  var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
                  if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
                  }

                  function MM_findObj(n, d) { //v4.01
                  var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
                  d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
                  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
                  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
                  if(!x && d.getElementById) x=d.getElementById(n); return x;
                  }

                  function MM_swapImage() { //v3.0
                  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
                  if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
                  }
                  //-->
                  </script>

                  </head>
                  <body>
                  <div id="page">

                  <?php
                  include("themes/header.php");
                  ?>
                  <div id="conteneur">
                  <div id="contenu">
                  <?php

                  $page = (isset($_GET['page']) && $_GET['page'] != '' ? $_GET['page'] : '0');

                  if(isset($page)){
                  if(!is_numeric($page)){
                  echo "Erreur page inconu";
                  exit;
                  }
                  }
                  switch($page)
                  {
                  case'0': include("page/accueil.php");
                  break;
                  case '1': include("page/qsn.php");
                  break;
                  default: include("page/accueil.php");//page par défaut
                  break;
                  }
                  ?>

                  </div>
                  <div id="voletlog">
                  <?php

                  include ("themes/volet.php");

                  ?>
                  </div>
                  </div>
                  <?php
                  include ("themes/pied.php");
                  ?>
                  </div>

                  </body>
                  </html>

                  --------------------------------------------------------------------------------------------
                  merci pour ton aide
                  1. Normal que sur ta page volet.php il ne connait pas $utilisateur étant donné que la variable est déclaré sur index.php !!
                    Le test que je t'ai donné est à faire sur la page index
                7. excuse moi mais je comprends pas bien ce que tu me dit car enfaite le code normalement devrait marcher

                  if (session_is_registered("authentification") && $_SESSION['privilege'] == "admin"){
                  j'execute cela
                  }
                  else {
                  j'execute cela
                  }
                  ?>

                  car si session privilége n'existe pas il execute le else ? non ?
                  1. Bon les mecs j'ai trouver une solution, biensur c'est pas le top mais l'erreur n'apparait plus.

                    if ($_SESSION['authentification'] = TRUE){

                    }

                    merci pour vos avis sur ce rajout.
                    1. " les mecs " loupé j'suis une gonzesse ! :)
                      Sinon quand on fait un if la syntaxe c'est comme sa :
                      if ($_SESSION['authentification'] == TRUE){
                      
                      }