/*
*	YaLogin - Yet Another Login - basic auth with session
	README
*	(c) 2003 - Lorenzo Noccioli noccioli@dada.it
*    	This program is free software; you can redistribute it and/or modify
*    	it under the terms of the GNU General Public License as published by
*   	 the Free Software Foundation; either version 2 of the License, or
*   	 (at your option) any later version.
*
*   	 This program is distributed in the hope that it will be useful,
*   	 but WITHOUT ANY WARRANTY; without even the implied warranty of
*   	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   	 GNU General Public License for more details.
*
*   	 You should have received a copy of the GNU General Public License
*  	 along with this program; if not, write to the Free Software
*   	 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
*
*	
*/
Per i dettagli sulla licenza vedere il file LICENSE

ATTENZIONE: lo script richiede l'installazione delle Librerie PHP PEAR (in particolare PEAR::DB) e' possibile scaricarle
all'indirizzo http://pear.php.net/

Caratteristiche:
Classe astratta di Login e autenticazione
Login con sessioni
Login con cookie persistente
Login con dati da form
Opzione di salvataggio del login su cookie disponibile all'utente
Nessun dato sensible (password/username) salvato nel cookie
Nessun dato sensibile (password) salvato nel cookie
Facilita' di integrazione nel proprio sistema

Installazione
Scompattare tutti i files in una cartella pubblica sul webserver
Importare la dump dell'anagrafica base:
Da prompt $ mysql -h host -u username -p nomedb < login.sql
Oppure utilizzare una utlity quale phpMyAdmin

Configurazione
in LoginClass.php modificare la funzione db_connection, impostando i propri parametri di connessione al db
la dump compresa in questa distribuzione creera' la tabella f_users, in caso venga cambiato il suo nome nelle
query all'interno di LoginClass.php e' necessario aggiornarlo

Utilizzo
La dump inclusa creera' un utente con queste caratteristiche:
username: test
password: test
digitando la url http://www.miosito.com/dir_di_installazione/form.php
verra' presentato un form di login, utilizzando l'utente test, se tutto funziona correttamente, sarete autenticati
e riceverete un messaggio di benvenuto; utilizzando una password sbagliata ritornerete al form di login;
In generale
Per autenticare un login si utilizza il metodo checkLogin(); a cui possono essere passati nell'ordine
i seguenti parametri: username, password, rememberme (login persistente)
Si usano i parametri solitamente quando la funzione viene richiamata da un post di un form
Non si usano i parametri quando si vuole verificare il login presente nella sessione (o nel cookie)
Esempi:

Proteggere una pagina all'interno del sito controllando sessione o cookie:
<?
require_once("LoginClass.php");
$db = db_connection();
$login = new Login($db);
if ($login->checkLogin()) {
	?>
	codice della pagina protetta
	<?
}else {
	header ("location:pagina_di_iscrizione_o_login.html");
}
?>

Eseguire il login da form (controllando i dati di login):
<?
require_once("LoginClass.php");
$db = db_connection();
$login = new Login($db);
if ($login->checkLogin($user,$pass,$remember)) {
	?>
	codice della pagina protetta o forward verso una pagina protetta
	<?
}else {
	header ("location:pagina_di_iscrizione_o_login.html");
}
?>
Ovviamente questo metodo funziona anche come controllo di sessione/cookie, in pratica possono essere sempre specificate
le variabili $user,$pass,$remember; lo script si comportera' cosi':
- Controllo della presenza della sessione
- Se fallisce controllo della presenza del cookie
- Se fallisce controllo sul db


Eseguire il logout (verra' distrutta sia la sessione che il cookie) e redirezione su pagina di login:
<?
require_once("LoginClass.php");
$db = db_connection();
$user = new Login($db);
$user->loginLogoutFull();
header("location:pagina_di_login.html");
?>

e' ovviamente possibile eseguire il controllo di login anche su singole parti della pagina;
ad esempio per decidere gli include, se mostrare o non mostrare certi link ecc;

la sessione salva i seguenti dati
$_SESSION['username'] lo username
$_SESSION['id'] l'id
$_SESSION['valid'] codice di controllo di validita' (nessun utilizzo esterno)
$_SESSION['cookie'] il valore del cookie se presente
ad esempio $_SESSION['username'] e $_SESSION['id'] possono essere utilizzati per successive query e personalizzazioni


Personalizzazione:
La tabella degli utenti (cosi' come tutto il resto) puo' essere modificato per le proprie esigenze:
Se non avete dimestichezza con le classi e con il PHP e non volete intervenire radicalmente nel core-script
lasciate il nome della tabella a f_users
e non eliminate/modificate i seguenti campi:
 id
 username
 password
 valid
 cookie

il campo valid contiene un codice (0 o 1) per bannare (sospendere) temporaneamente un account

Da Fare:
Sessioni gestite sul DB
Controlli di sicurezza con la classe IP
Classe astratta per l'iscrizione