Sessioni e aggiunta admin

Salve..

Ho creato uno script php che permette di entrare in un'area amministrativa e da dentro quest'area è possibile aggiungere nuovi admin.. Il problema è che quando aggiungo un nuovo admin non capisco perchè i miei dati di $_SESSION cambiano e diventano quelli dell'admin appena creato...

Incollo qui il codice di aggiunta amministratore per poter capire se c'è qualche problema...

   // Aggiungi admin_do
   if($action == "add_admin_do")
   {
      
        $adm_user= $_POST['adm_user'];
        $adm_pass= $_POST['adm_pass'];
        $adm_pass2= $_POST['adm_pass2'];
        $adm_mail= $_POST['adm_mail'];

      // Se uno dei campi del form rimane vuoto 
      if (trim($adm_user) == "" OR trim($adm_pass) == "" OR trim($adm_mail) == "") // La funziona trim esclude gli spazi e li considera anch'essi come spazio vuoto
         Errore("admin.php?auth=$_SESSION[adm_auth]&action=add_admin", "Errore", "Attenzione! Tutti i campi devono essere riempiti!", "..");

       // Controllo password di conferma
      if ($adm_pass == $adm_pass2) 
      { 
         // Viene assicurato che gli apici e apici doppi siano anteposti da un solo slash (/) nelle variabili del form
         $adm_mail = addslashes(stripslashes($adm_mail));
         // Per compatibilità con html converte i caratteri speciali come &, >, <, ecc....
         $adm_mail = htmlspecialchars($adm_mail);
   
         // Check 3: Controllo validità E-Mail
         if (eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $adm_mail)) 
         {

            // Connessione mysql
                Db_connect();
            
            // Check
            if (!get_magic_quotes_gpc()) // Verifica se i dati contengono gli slash prima degli apici, se nn ci sono li aggiunge
            {
               $adm_user= htmlspecialchars(addslashes($_POST['adm_user']));
               $adm_pass= htmlspecialchars(addslashes($_POST['adm_pass']));
            }
            else 
            {
               $adm_user= htmlspecialchars($_POST['adm_user']);
               $adm_pass= htmlspecialchars($_POST['adm_pass']);
            }
      
            // Controllo user già esistente
            $query = "SELECT * from ".$tbl_prefix."admin WHERE adm_user = '$adm_user'"; 
            $risultato = mysql_query($query); 
            $num_righe = mysql_num_rows($risultato);
            
            // Sub-Check 1 = TRUE: L'utente risulta già nel database quindi è già registrato!
            if($num_righe)
                 Errore("admin.php?auth=$_SESSION[adm_auth]&action=add_admin", "Errore", "L'username inserito risulta già esistente!", "..");

             // Controllo mail già esistente
             $query = "SELECT * from ".$tbl_prefix."admin WHERE adm_mail = '$adm_mail'"; 
            $risultato = mysql_query($query); 
            $num_righe = mysql_num_rows($risultato); 
            
             // Sub-Check 2 = TRUE: La mail è già stata registrata
            if($num_righe)
                 Errore("admin.php?auth=$_SESSION[adm_auth]&action=add_admin", "Errore", "L'email inserita risulta già utilizzata da un altro admin account", "..");
        
                            //Genera un codice di autorizzazione casuale tramite la funzione Auth()
              $adm_auth = Auth();
              // Cripta l'id nel database in md5
             $crypt_auth = md5($adm_auth);

            // Cripta la password nel database in md5
            $crypt_pass = md5($adm_pass); 
            $query = "INSERT INTO ".$tbl_prefix."admin (adm_user , adm_pass , adm_mail , adm_auth) VALUES ('$adm_user', '$crypt_pass' , '$adm_mail' , '$crypt_auth')"; 
            if (mysql_query($query))
                 Ok("adm_protetta.php?auth=$_SESSION[adm_auth]", "Admin aggiunto", "Admin registrato correttamente", "..");

          }
      // Check 3 = FALSE: La mail inserita non è scritta correttamente
      else 
         Errore("admin.php?auth=$_SESSION[adm_auth]&action=add_admin", "Errore", "Attenzione! L'indirizzo email non ha una sintassi corretta (es. nome@dominio.com)", "..");

   }
   else 
         Errore("admin.php?auth=$_SESSION[adm_auth]&action=add_admin", "Errore", "Attenzione! La password di controllo inserita non è corretta", "..");
   }
inviato 9 anni fa
NeO_Giu
X 0 X

Ciao,

non riesco a vedere come possa succedere, dato che non scrivi mai sulle variabili di sessione...il problema non è qui probabilmente.

Se posso darti un consiglio, credo che la tua funzione Errore() esegua poi una redirect, giusto? Per questo ti porti dietro la var di sessione... se è così prova a chiamare session_write_close() subito prima di fare la redirect (immagino con header() ). Perchè altrimenti tutti i dati di sessione vengono persi.

In questo modo dopo la redirect non dovresti aver perso i dati di sessione e non devi portarti in giro la variabile di sessione 'a mano'. Non so se può risolvere il tuo problema, ma credo ti aiuterà a trovare l'errore più facilmente!

 :bye:

risposto 9 anni fa
robertomigli
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda