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";
    ?>
    

    0
    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 {
      ?>
      0
      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
        0
    2. oui effectivement sur la page index.php j'include cette page.
      donc je supprime session_start
      0
      1. apres suppression de session_start je me retrouve avec l'erreur suivant :
        Notice: Undefined index: privilege in
        0
        1. Apparement il ne retrouve pas ta session appellé privilege,
          Sur quelle page lui donnes-tu une valeur ?
          0
      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");
        }
        ?>
        0
        1. Tu as deux fois l'ouverture de la balise php
          Sinon sur cette page essayes de faire un echo de ta session ;)
          0
          1. comment faire cette echo de session
            0
            1. Tout simplement :
              echo $_SESSION['privilege'];
              

              sur ta page index
              0
              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
                0
                1. Donne moi le lien entre les deux pages que tu viens de me donner
                  0
              2. effectivement $_session privilége me renvoi cela : Notice: Undefined index: privilege in
                0
                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.
                  0
                  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 !
                    0
                    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??
                      0
                      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
                        
                        0
                    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
                      0
                      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";
                        }
                        
                        
                        
                        0
                    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 ^^
                      0
                      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 !!!
                        0
                    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
                      0
                      1. Donc cela fonctionne ?
                        0
                    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){
                      0
                      1. Montre ton code sinon je peux rien faire
                        0
                    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
                      0
                      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
                        0
                    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 ?
                      0
                      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.
                        0
                        1. " les mecs " loupé j'suis une gonzesse ! :)
                          Sinon quand on fait un if la syntaxe c'est comme sa :
                          if ($_SESSION['authentification'] == TRUE){
                          
                          } 
                          
                          0