PHP tutorial – Come creare un semplice sistema di login

Autore: lordmarin
Pubblicato il 3 aprile 2007

Post Correlati

  • Nessun post correlato

PREMESSA: come da molti commenti pervenuti su questa guida, il sistema di login non è funzionante. Purtroppo però l’ autore di tale articolo non è più reperibile per poterlo aggiornare. Se qualcuno fosse in grado di sistemare l’ articolo per rendere funzionale il sistema di login può contattare Davide Tommasin direttamente ad suggerimenti@informaticafriuli.com

Grazie

————————————————————

Questo script è composto da 4 file:
1. main_login.php
2. checklogin.php
3. login_success.php
4. logout.php

Procedimento.

1- Noi abbiamo utilizzato un database chiamato test, in cui abbiamo creato un tabella chiamata members.

Questo è il codice sql per creare la tabella:

[mysql]CREATE TABLE `members` (
`id` int(4) NOT NULL auto_increment,
`username` varchar(65) NOT NULL default ”,
`password` varchar(65) NOT NULL default ”,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;


– Dumping data for table `members`

INSERT INTO `members` VALUES (1, ‘admin’, ‘admin’);[/mysql]

Quindi per effettuare il login dovremo utilizzare come nome utente: admin e come password: admin

2 – Creiamo il file main_login.php
e copiamo al suo interno il seguente codice:

[html]

Member Login
Username :
Password :

[/html]

3 – Creiamo il file checklogin.php e inseriamo al suo interno il seguente codice:

[php] $host=”localhost”; // Hostname
$username=”"; // Mysql username
$password=”"; // Mysql password
$db_name=”test”; //Nome del Database
$tbl_name=”members”; // Nome della Tabella

// Procedimento per connettersi al Database
mysql_connect(“$host”, “$username”, “$password”)or die(“cannot connect”);
mysql_select_db(“$db_name”)or die(“cannot select DB”);

// Nome utente e password inviate attraverso il form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$sql=”SELECT * FROM $tbl_name WHERE username=’$myusername’ and password=’$mypassword’”;
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file “login_success.php”
session_register(“myusername”);
session_register(“mypassword”);
header(“location:login_success.php”);
}
else {
echo “Attenzione username o password errati”;
}
?>[/php]

4. Creiamo il file login_success.php e inseriamo al suo interno il seguente codice:

[php]// Controlla se la sessione è stata registrata, altrimenti rimanda alla pagina di login
// Questa prima parte dobbiamo inserirla in tutte le pagine che vogliamo proteggere con password prima di qualsiasi altra cosa
session_start();
if(!session_is_registered(myusername)){
header(“location:main_login.php”);
}
?>
[/php]

[html]

Login Successful

[/html]

5. Infine creiamo il file logout.php che ci pemetterà di distruggere la sessione:
[php] session_start();
session_destroy();
?>[/php]

In questo modo abbiamo creato un semplice sistema di login in php + mysql

Questo articolo è stato pubblicato martedì, aprile 3rd, 2007 ed inserito in Guide e How-to, PHP. You can follow any responses to this entry through the RSS 2.0 feed. Puoi lasciare un commento, o utilizzare il trackback da inserire nel tuo sito e nel tuo blog per citare questo post.

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

27 Responses to “PHP tutorial – Come creare un semplice sistema di login”

  1. Il Fornaio on maggio 30th, 2007 at 11:38

    Manca un elemento fondamentale nello script main_login.php

    Infatti senza un prima di Member Login ed il relativo tag di chiusura dopo lo script non esegue nessuna autenticazione.

    Ciao

  2. Il Fornaio on maggio 30th, 2007 at 11:39

    ovviamente tutti i tag che ho messo non vengono visualizzati anche se ho usato i tag prima e dopo il codice che ho inserito. Riprovo a fare il commento usando però il tag

  3. Il Fornaio on maggio 30th, 2007 at 11:41

    ok la tua form di commento non accetta nessun tag. :@

    In poche parole volevo dire che, senza un tag form con attributi action=”checklogin.php” method=”post” che racchiude tutta la table di immissione nome utente e password, lo script non esegue nessuna autenticazione.

    Scusami per i commenti precedenti

  4. lordmarin on maggio 30th, 2007 at 19:56

    Ciao,
    lo script php funzionava, fino a quando è stato scritto qui.
    Purtroppo l’editor a nostra disposizione ha cancellato parte di codice.
    Vedo di sistemarlo il prima possibile.

    Ciao
    Roberto

  5. Il Fornaio on maggio 30th, 2007 at 21:48

    Ah ok, grazie mille della delucidazione ;)

  6. danilo on giugno 27th, 2007 at 23:41

    questo sistema di login nn funziona + con il nuovo php,
    ritorna errori:

    session.bug_compat_42 e session.bug_compat_warn

  7. Davide Tommasin on giugno 28th, 2007 at 10:48

    Grazie della segnalaizone Danilo.
    In questo caso spero che Roberto, l’ autore della guida, possa aggiornare l’ articolo.

  8. Dario Tion on luglio 19th, 2007 at 18:11

    Saluti a tutti. Il session.bug_compat_warn e il session.bug_compat_42 sono relativi alla registrazione delle variabili di sessione. Nasce dal fatto di aver utilizzato come nome di variabile locale uno già usato per la variabile di sessione.

    $myusername=$_POST['myusername'];
    e
    session_register(“myusername”);

    E’ possibile disabilitare l’errore da php.ini, ma è sicuramente consigliabile utilizzare nomi diversi.

    Inoltre, per evitare un SQl-injection, è necessario modificare la query come segue

    $sql=”SELECT * FROM $tbl_name WHERE username=’”.addslashes($myusername).”‘ and password=’”.addslashes($mypassword).”‘”;

    La funzione addslashes (dovrebbe) applica uno carattere di escape prima di ogni carattere potenzialmente pericoloso per mysql.

    Nello script in questione, utilizzando come utente e come password

    ‘ OR ”=’

    vengo autenticato correttamente, in quanto la query diventa:

    SELECT * FROM $tbl_name WHERE username=” OR ”=” and password=” OR ”=”

    Condizione sempre vera; si viene quindi autenticati,anche se con user e password non “ottimali”.

  9. Dario Tion on luglio 19th, 2007 at 18:46

    Altra cosa carina sarebbe l’adozione della crittografia sulla password.
    Così, in caso di accesso al database, non sarebbe possibile (a meno di verifiche a forza bruta) risalire alla password dell’utente (che poi così è libero di dimenticarla sul post-it sopra monitor !)

    CREATE TABLE `members` (
    `id` INT(4) NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(65) NOT NULL DEFAULT ”,
    `password` VARCHAR(32) NOT NULL DEFAULT ”,
    PRIMARY KEY (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=1 ;


    – Dumping data for table `members`

    INSERT INTO `members` VALUES (1, ‘admin’, md5(‘admin’));

    In questo modo la password “admin” viene convertita in md5, una stringa di 32 caratteri univoca. Nel caso di “admin” risulta:

    21232f297a57a5a743894a0e4a801fc3

    La query dovrà diventare:
    $sql=”SELECT * FROM $tbl_name WHERE username=’”.addslashes($myusername).”‘ and password=’”.md5($mypassword).”‘”;

    Ora, se un hackerino riuscisse a risalire ad dato salvato (md5), magari con una query malevola che stampasse il contenuto della tabella di autenticazione, comunque non potrebbe accedere, in quanto non esiste (forza bruta a parte!) sistema per passare da md5 a parola chiave.

  10. Luca on luglio 21st, 2007 at 18:43

    Ragazzi non si capisce niente, il post non è aggiornato e in definitiva questo login inutilizzabile :D

  11. Davide Tommasin on luglio 21st, 2007 at 18:51

    L’ autore ha qualche problema di tempo e non arriva ad aggiornare l’ articolo in quesot periodo: cmq mi prodigherò di recapitargli il messaggio :)

  12. Dany on ottobre 30th, 2007 at 06:19

    Ciao a tutti,
    ho installato lo script ed ho un problema…
    L’autenticazione sembra funzionare solo con la prima pagina login_success.php, ma quando vado a fare la verifica nelle altrepagine che voglio progeggere da autenticazione, vengo rediretto alla pagina di login.
    Dov’è l’inghippo?
    Thanx
    Dany

  13. Davide Tommasin on gennaio 29th, 2008 at 16:41

    E’ stato risistemato il post, ora il codice dovrebbe essere ok a detta dell’ autore… se non fosse così potreste sempre pensare di intasargli la casella mail per chiedere supporto lordmarin [chiocciola] gmail.com

  14. lordmarin on gennaio 29th, 2008 at 18:00

    Magari visto che sono in procinto di un trasloco meglio non intasarmi troppo la mail :P

  15. Beppe on marzo 12th, 2008 at 21:32

    ciao mi serviva una info. devo creare un progetto con un sito che permetta: registrazione utente, login e logout naturalmente… e che se loggato consenta di visualizzare una certa parte in una pagina…come inserire commenti ecc… se ospite invece, solo di visualizzare! inoltre mi serve che le pagine php accettino connessioni da più utenti contemporaneamente. Ho cercato fino ad ora ma trovo esempi (piuttosto complessi oltretutto) che utilizzano solo 1 utente loggato. E’ un progetto per scuola, quindi non pretendo super controlli di sicurezza ecc… mi basta la multiutenza e che appunto un utente se loggato può fare azioni, se ospite può solo vedere (oopure non accedere proprio ad alcune pagine).

  16. Beppe on marzo 12th, 2008 at 23:20

    ho dimenticato una domanda: a che serve nella tabella il campo ID? nell’esempio e nella gestione non è mai usato… non è più logico mettere come chiave primaria la username? (visto che non possono esistere username uguali)

  17. mommi on marzo 13th, 2008 at 18:09

    E’ più logico avere una ID come chiave primaria, siccome è possibile consentire la modifica allo username, che causerebbe problemi in quanto chiave esterna di altre tabelle.

  18. lordmarin on marzo 13th, 2008 at 18:18

    Allora premetto che ho poche esperienze di programmazione.. questo semplice login lo avevo fatto per un progettino..
    Diciamo che mi era sembrato più logico mettere un ID come chiave primaria anche per quello che riguarda gli indici.. poi se ci sono modi migliori parliamone :)

  19. beppe on marzo 13th, 2008 at 18:25

    ah ok ho capito xke l’ ID è chiave…a me serve metterla come nickname invece perchè voglio che il nick non sia più modificabile in quanto poi ad ogni nick è associata una cartella sul server con lo stesso nome e mi è più facile così :)

  20. nicola on aprile 8th, 2008 at 18:47

    Bravi e per fortuna era un semple sistema di login?
    E se fiosse stato complicato?

  21. Davide Tommasin on aprile 8th, 2008 at 18:58

    @nicola : magari quel “semplice” nel titolo può fuorviare l’ idea, ma se ci pensi bene, con un “semplice” copia incolla del codice dal post sopra scritto, hhai la possibilità di avere un sistema già funzionante. Per il resto passo la palla all’ autore del post.

  22. moebius on maggio 14th, 2008 at 11:54

    manca la validazione dell’input, mai sentito parlare di SQL Injection? Quando la scelta e’ fra le cose facili e le cose fatte bene…

  23. Urgente: Pagina Login In Php - Grafici Creativi on dicembre 12th, 2008 at 13:49

    [...] questo anche se si usa il db PHP tutorial – Come creare un semplice sistema di login » Informatica Friuli oppure Login sicuro in Ajax e Php | Articoli Php | Php.HTML.it __________________ MY PORTFOLIO [...]

  24. techno on febbraio 14th, 2009 at 11:03

    ciao a tutti questo sistema di login non funzona in nessun modo
    ho testato tutto ma non va
    errori: manca lo script registrayione

  25. br0n2 on marzo 6th, 2009 at 16:09

    e infatti è un “semplice” sistema di login, non un “sicuro” sistema di login.
    E per Nicola che non lo considera troppo semplice direi di tener presente che non è mai troppo tardi per cambiare e rinnovarsi …

  26. Registrazione in un sito php - AlterVista | Spazio web gratis, hosting free php mysql on aprile 8th, 2009 at 22:46

    [...] primo che ho trovato. qui Poi basta usare google e vedrai che qualcosa salta fuori. __________________ [...]

  27. Lisa on giugno 26th, 2009 at 14:55

    ho fatto esattamente quello che c’è scritto nella procedura sopra.. ed ho eliminato i warning come ha suggerito Dario Tion facendo diventare quelle due variabili:
    session_register(“myuser”);
    $myusername=$_POST['myuser'];

    (non sono neanke sikura ke si dovessero cambiare così)
    solo che non mi funziona il login, xkè anche se metto admin admin, mi dice ke l’utente è sbagliato. Se metto invece un nome utente e psw non presenti nel mio db allora mi escono 3 warning:
    Warning: session_register() [function.session-register]: Cannot send session cookie – headers already sent by (output started at C:\xampp\htdocs\checklogin.php:9) in C:\xampp\htdocs\checklogin.php on line 32

    Warning: session_register() [function.session-register]: Cannot send session cache limiter – headers already sent (output started at C:\xampp\htdocs\checklogin.php:9) in C:\xampp\htdocs\checklogin.php on line 32

    Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\checklogin.php:9) in C:\xampp\htdocs\checklogin.php on line 34

    la riga 32 è : session_register(“myuser”);
    la riga 34 è: header(“location:login_success.php”);

Leave a Reply

Feed RSS Blog Informatica Friuli Ci sono 1374 che leggono via Feed Reader


Iscriviti alla Newsletter


Creazione Siti e Servizi Web Friuli


Servizi Web in Friuli - Udine e Aquileia

Sei un' azienda, un libero professionista o un web designer del Friuli Venezia Giulia?
  • Ti serve, consulenza come azienda?
  • Vuoi proporci o cercare collaborazioni per la tua web agency?
  • Ti servono servizi web, un sito o un blog per la tua associazione?
Clicca qui per il modulo contatti

Servizi Web Open Source Aziende in Friuli Venezia Giulia - Udine Aquileia

Recensioni e Guide Utili

EBook 3 Consigli Su Come Personalizzare WordPress
EBook 3 Consigli Su Come Personalizzare WordPress Questo ebook è il primo pubblicato da Informatica Friuli dedicato alla personalizzazione di certi aspetti dei template per WordPress. Questo ebook non deve dare grosse aspettative ...

Continua a leggere...
Come Scegliere L’ Hosting Giusto Per Il Posizionamento
Come Scegliere L’ Hosting Giusto Per Il Posizionamento Non c'è hosting, spazio web dove hai caricato i file del tuo sito, che ti da la garanzia al 100% di posizionarti nella serp di Google al primo posto. [caption id="" ...

Continua a leggere...
NewsMastering con WordPress
NewsMastering con WordPress Prendo spunto da quanto si può leggere su MasterNewMedia per quanto riguarda il Newsmaster come la figura che filtra e fornisce ...

Continua a leggere...

Visitatori IF

Licenza IF

Tag

aquileia blog campi personalizzati come scrivere comunicati stampa comunicazione creazione sito custom fields editoria editori online facebook feed feedwordpress fidelizzare focus friuli hackcamp hosting hosting seo if linux mail marketing Marketing masternewmedia myspace nerd newsletter newsmaster Notizie IF plugin wordpress primi sui motori restyling sito robin good SEO servizi web sito nerd sitonerd social network template theme wordpress udine webdesign web design web service wordpress