creare login

ciao Gianni volevochidere come si fa a creare un login in php e a farlo funzionare con le sessioni sto provando da 4 ore a farlo per il mio sito ma nn ci riesco....illluminami e dimmi come fare ::)

inviato 11 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Un generico sistema di log-in si basa su 3 elementi:

1) autenticazione

2) persistenza dei dati

3) controllo degli accessi / permessi

Il sistema di autenticazione serve a verificare le credenziali di un utente che vengono confrontate con dei dati precedentemente memorizzati.

La persistenza dei dati serve a far si che non sia necessario verificare l'identità dell'utente ad ogni richiesta di una risorsa protetta

Infine il controllo degli accesi relativamente ai permessi posseduti da un utente serve a decidere se una risorsa può essere accessibile ad un utente.

Tutti i sistemi di log-in implementano questi tre elementi, in maniera diversa ma con funzionalità analoghe.

Facciamo un semplicissimo esempio: solo gli utenti a conoscenza di un codice segreto possono entrare in una sezione "privata" del sito.

1) modulo di autenticazione: login.php

<?php
if($_POST)
{
   if($_POST['password'] == 'topsectret')
   {
      session_start();
      $_SESSION['login_effettuato'] = true;
      header('location: privata.php');
      exit();
   }
   else
   {
      mostra_form('Password errata!');
   }
}
else
{
   mostra_form();
}

function mostra_form($messaggio = '')
{
   ?>
   <html>
   <head>
   <title>Login</title>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   </head>
   <body>
   <p><?php echo $messaggio ?></p>
   <form action="" method="post" name="login" id="login">
     <p>password: 
       <input type="text" name="password">
     </p>
     <p>
       <input type="submit" name="Submit" value="invia">
     </p>
   </form>
   </body>
   </html>
   <?php
}
?>

La prima volta che viene lanciato lo script viene mostrato un form in cui l'utente deve inserire una password. Una volta inviato il form lo script controlla la password inserita con una stringa memorizzata. Se coincidono viene memorizzato l'esito positivo del login e l'utente viene reindirizzato alla pagina private.php

2) persistenza dei dati

lo script precedente realizza anche la persistenza dei dati. Infatti se il login ha esito positivo viene avviata la sessione e viene memorizzato nell'array $_SESSION una variabile che conserva l'esito del login, in modo da non doverlo ripetere.

3) controllo degli accessi / permessi

<?php
session_start();
if($_SESSION['login_effettuato'] != true)
{
   header('location: login.php');
   exit();
}

echo 'Benvenuto nella sezione privata!';
?>

questo è un ipotetico script per controllare gli accessi ad una pagina privata. Il controllo si basa su una semplice verifica del valore della variabile di sessione "login_effettuato" che come detto prima conserva l'esito del login. In caso l'utente non abbia sperato il login viene rinviato alla pagina login.php

Anche se questi esempi sono molto semplici, qualsiasi sistema di login si basa sugli stessi principi.

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Scusa Gianni...

ho visto il tuo codice e l'ho provato... mi è sorto un dubbio: "e se volessi fare il logout senza chiudere e riaprire il navigatore?"

E' corretto creare una pagina tipo logout.php con il seguente codice:

<?php
    session_start();
    if($_SESSION['login_effettuato'] == true)
    {
        session_destroy();
    }

    header('location: login.php');
?>

Io ho visto che funziona... ma è corretto come metodo? Sai... non ho mai usato le sessioni, e la cosa mi ha incuriosito parecchio...

Tra l'altro, per impedire che uno possa entrare erroneamente nella pagina di login quando è già autenticato, io modificherei il codice della pagina login.php così:

<?php

// Cosi' se l'utente e' gia' autenticato viene dirottato all'area privata...
session_start();
if($_SESSION['login_effettuato'] == true)
{
   header('location: privata.php');
   exit();
}

// Altrimenti richiede l'autenticazione...
if($_POST)
{
   if($_POST['password'] == 'password')
   {
      $_SESSION['login_effettuato'] = true;
      header('location: privata.php');
      exit();
   }
   else
   {
      mostra_form('Password errata!');
   }
}
else
{
   mostra_form();
}

function mostra_form($messaggio = '')
{
   ?>
   <html>
   <head>
   <title>Login</title>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   </head>
   <body ONLOAD="javascript:document.getElementById('mypwd').focus();">
   <p><?php echo $messaggio ?></p>
   <form action="" method="post" name="login" id="login">
     <p>password: 
       <input type="password" name="password" ID="mypwd">
     </p>
     <p>
       <input type="submit" name="Submit" value="invia">
     </p>
   </form>
   </body>
   </html>
   <?php
}
?>

Mi dai un parere?

 ::)

risposto 11 anni fa
myne.it
X 0 X

Se vuoi maggiori info sulle sessioni ti consiglio di leggere il nostro articolo a riguardo:

http://www.phpnews.it/content/view/74/80/1/2/

ti riporto il codice per cancellare completamente tutto ciò che è legato ad una sessione:

<?php
session_start();

// cancello tutti i dati di sessione
$_SESSION = array();

// Cancelliamo l'eventuale cookie di sessione
if (isset($_COOKIE[session_name()]))
{
    setcookie(session_name(), '', time()-42000, '/');
}

// distruggiamo la sessione
session_destroy();
?>

per quanto riguarda il secondo script sarebbe più indicato effettuare anche un controllo sull'esistenza della variabile $_SESSION['login_effettuato']:

if(isset($_SESSION['login_effettuato']) AND $_SESSION['login_effettuato'] == true) ...

infatti se uno non è loggato allora la variabile $_SESSION['login_effettuato'] non esiste ancora, e si riceverebbe un NOTICE

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

MITICO!

'mo me lo segno!

 ;D

risposto 11 anni fa
myne.it
X 0 X

EH! L'ho provato e l'ho adattato per una piccola applicazione "intranet" che sto realizzando per l'azienda per cui lavoro...

In pratica viene chiesto il login ed il server tenta l'accesso al database AS400 via ODBC utilizzando il nome utente e la password digitati con l'utente...

Se questi non sono presenti tra gli utenti di AS400 autorizzati ad entrare torna alla pagina di login e mostra l'errore, altrimenti entra nell'area riservata collegata ad AS400...

Qui l'utente può cliccare di LOGOUT per disconnettersi (o chiudere il browser) o proseguire con la navigazione e la consultazione del database...

MITICO!

 :D

risposto 11 anni fa
myne.it
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda