Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272

    Sistema di accesso con sessioni

    Sto provando un sistema di login con uso di sessioni che ho copiaincollato qualche tempo fa da una discussione su questo forum.

    Sembrerebbe tutto a posto ma, nelle pagine protette, indipendentemente da quale user e password io inserisca (anche quelle corrette admin / admin), quando premo invio i campi del form si resettano e non si può accedere.

    In locale o su Altervista il risultato è lo stesso.
    Vi posto il codice, così chi vuole gli dà un'occhiata, ma indipendentemente che lo guardiate o meno, il fatto che il form resetti i campi quando premo invio senza che avvenga il login è indice di quale errore? Configurazione di php o errore nello script?
    Grazie a chi mi vorrà rispondere. Un saluto a tutti.

    Codice PHP:
    <?php
    //Da inserire all'inizio di ogni pagina che si vuole proteggere
    require_once ("login.php");
    ?>

    <?php 
    //USERS.PHP
    $users['admin'] = "admin"
    ?> 

    <?php 
    //LOGIN.PHP
    session_start();
    require_once (
    "users.php");

      if  ( !isset(
    $_POST['user']) || !isset($_POST['pass']) || !isset($_SESSION['user']) || !isset($_SESSION['pass']) ) { 
          
    form(); 
          exit; 
      }
      
      elseif  ( !
    check_login($_POST['user'], $_POST['pass'], $users) )  { 
          
    form "Username e/o password errati." ); 
          exit; 
      }
      
      elseif ( !
    check_login($_SESSION['user'], $_SESSION['pass'], $users) )  { 
          
    form("Username e/o password di sessione errati."); 
          exit; 
      } 
      
      elseif ( 
    check_login($_POST['user'], $_POST['pass'], $users) )  { 
          
    $_SESSION['user'] = $_POST['user']; 
          
    $_SESSION['pass'] = $_POST['pass'];
      } 

      function 
    check_login $user$pass$users )  { 
          foreach(
    $users as $key => $value) { 
               if ( 
    $user == $key && $pass == $value )  { 
                     return 
    true
                } 
          } 
          return 
    false



      function 
    form$message="" )  { 
          echo 
    "
    <form action='?' method='post'> 
    <h2>Login</h2> 
    Username: <input type='text' name='user'>
     
    Password: <input type='password' name='pass'>

        "

          if  (
    $message != "") echo $message
        echo 
    "
    <input type='submit' value='login'>
    </form>
        "


    ?>

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272
    Nessuno?

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272
    up

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272
    Anche se nessuno mi si è cagato di striscio (neanche un piritino ), ma vi perdono xké anche a me seccherebbe leggere 50 righe di codice per sapere cosa non va, sono così contento di avere risolto che fingerò che a qualcuno possa interessare.
    Ho preso spunto dallo script originario e ho riscritto da capo tutto e funziona perfettamente.
    La mia diagnosi è che c'erano gli if messi a minkia che non permettevano di recuperare i dati del form rispedendomi sempre indietro poi non lo so l'importante che ora funzioni. Se avete qualcosa da aggiungere.

  5. #5
    Ho letto adesso la discussione... mi passeresti il link (o il codice) dello script? Grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    272
    Ben volentieri! Ecco lo script modificato (neanche tanto per la verità, ma ora funziona ). Mi raccomando se fai modifiche degne di nota fammi sapere: mi interesserebbe sicuramente.
    Come puoi vedere, al momento, valgono le seguenti coppie user/password: amministratore-amministratore e utente-password.
    Ciao

    Codice PHP:
    <?php
      $utenti 
    = array ('amministratore'=>'amministratore''utente'=>'password');
      
      if  ( isset (
    $_POST['utente']) && isset($_POST['codice']) )  {
      
    //CONTROLLO SE ESISTONO DATI PROVENIENTI DAL FORM
          
    if ( controllaAccesso ($_POST['utente'], $_POST['codice'], $utenti) )  {
            
    $_SESSION['utente'] = $_POST['utente'];
            
    $_SESSION['codice'] = $_POST['codice'];
        }
        elseif ( !
    controllaAccesso ($_POST['utente'], $_POST['codice'], $utenti) )  {
            
    $segnalazione "</span>Nome utente e/o codice d'accesso errati!</span>
    "
    ;
            
    visualizzaFormAccesso $segnalazione );
            exit;
        }
      }
      
      elseif ( isset (
    $_SESSION['utente']) && isset($_SESSION['codice']) )  {
      
    //CONTROLLO SE ESISTONO DATI MEMORIZZATI IN SESSIONE
          
    if ( !controllaAccesso ($_SESSION['utente'], $_SESSION['codice'], $utenti) )  {
            
    $segnalazione "</span>Nome utente e/o codice di sessione errati!</span>
    "
    ;
            
    visualizzaFormAccesso $segnalazione );
            exit;
        }
      }
      
      else  {
      
    //ALTRIMENTI VISUALIZZA IL FORM
          
    visualizzaFormAccesso ();
        exit;
      }
      
      
      function 
    controllaAccesso ($utente$codice$utenti)  {
          foreach (
    $utenti as $chiave=>$valore)  {
            if (
    $chiave == $utente && $valore == $codice)  {
                return 
    true;
            }
        }
        return 
    false;
    }
      
      function 
    visualizzaFormAccesso $segnalazione "" )  {
          echo 
    "
    <form method=\"post\">
      


      <label for=\"utente\">Nome utente</label>

      <input type=\"text\" id=\"utente\" name=\"utente\" />

      <label for=\"codice\">Codice</label>

      <input type=\"password\" id=\"codice\" name=\"codice\" />
      </p>
      


          "
    ;
        if ( 
    $segnalazione != "" ) {  echo $segnalazione; }
        echo 
    "
        <input type=\"submit\" value=\"Invia\" />
        <input type=\"hidden\" name=\"camponascosto\" />
      </p>
    </form>
        "
    ;
    }
    ?>

  7. #7
    Nella foga di cercare uno script login ho dimenticato di controllare questo topic

    Intanto ne ho trovato uno molto completo, rispondo qui perchè probabilmente interessa anche a te dato che stavi cercando la stessa cosa. Questo che ho trovato è molto completo dal punto di vista delle funzioni:
    Access_user Class is an easy to use system for protecting pages and register users. They main features are: User-login, user registration, user update, remember login information, page protection, forgotten password recovery, mail based account activation and multi language message reporting and since the latest versions: maintain extra user profile information, access levels, a limited (safe) admin panel, manual account activation and an improved password check. The class is powered by MySQL and PHP sessions. Inside the package are examples for all primary methods.
    Nel caso ti interessi ti lascio il link:
    http://www.finalwebsites.com/snippets.php?id=10

    Non è uno di quegli script "invasivi", nel senso che è abbastanza facile da capire e da integrare in una struttura già esistente (sta tutto in una classe, poi ci sono esempi a corredo)

    Insomma a me è sembrata una buona soluzione, vorrei capire con l'aiuto di chi è più esperto di me o di chi l'ha già usato com'è l'aspetto sicurezza: premetto che non devo trattare dati di estrema importanza (altrimenti userei SSL).
    Da quel che ho capito questo script memorizza le password hashate in md5 ma le invia in chiaro... a me sembra un buon compromesso, ma sarei più sicuro se sentissi altri pareri.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.