Buon giorno, sto cercando disperatamente, di capire una volta per tutte le sessioni, cookie, ma sopratutto l'autenticazione di uno o più utenti.
Ho trovato in rete e qui su html.it, due modi apparentemente diversi di autenticazione.
Volevo un vostro parere sui due modi e se nell'eventualità, sia del primo che del secondo, apportare qualche miglioria.
1° esempio:
Questo primo esempio, mi restituisce all'entrata della pagina, una doppia autenticazione.codice:function authenticate() { header('WWW-Authenticate: Basic realm="Prova del Sistema di Autenticazione"'); header('HTTP/1.0 401 Unauthorized'); echo "Per poter accedere a questa risorsa occorre inserire una coppia login e password valide\n"; exit; } if (!isset($_SERVER['PHP_AUTH_USER']) || ($_POST['SeenBefore'] == 1 && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) { authenticate(); } else { echo " Benvenuto: {$_SERVER['PHP_AUTH_USER']} "; echo "Vecchio: {$_REQUEST['OldAuth']}"; echo "<form action='{$_SERVER['PHP_SELF']}' METHOD='POST'>\n"; echo "<input type='hidden' name='SeenBefore' value='1'/>\n"; echo "<input type='hidden' name='OldAuth' value='{$_SERVER['PHP_AUTH_USER']}'/>\n"; echo "<input type='submit' value='Ri autentifica'/>\n"; echo "</form></p>\n"; }
Che, non capisco come fà a restargli in memoria lo user e la password digitati.
Crea un file di sessione?o un cookie?E se si, in quale directory?Perchè ho tentato di trovarli, ma non ci sono riuscito.
2° esempio:
In questo secondo, c'è il classico form, dove si inserisce user e password.codice:include('ConnectionDB.class.php'); $Rconn = new DBConnection(); $Rconn->VerificaConn($ConnVersoDB); $_SESSION['SessUserName'] = $_SERVER['PHP_AUTH_USER']; //echo "User: " . $_SESSION['SessUserName']; $redirect="http://localhost/sessioni_TXT/login.php"; //gestione della sessione nel caso in cui i cookie sono disabilitati if(isset($_POST['PHPSESSID']) && !isset($_COOKIE['PHPSESSID'])){ $PHPSESSID=$_POST['PHPSESSID']; header("Location: $redirect?PHPSESSID=$PHPSESSID"); //si ricarica la pagina di login } session_start(); //si inizia o continua la sessione //controllo user e passwd da login if(isset($_POST['posted_username']) && isset($_POST['posted_password'])){ $sql = ("select distinct login, pwd_md5 from session_start where login='".$_POST['posted_username']."' and pwd_md5='".md5($_POST['posted_password'])."'") or die ("Impossibile effettuare la query sql" . mysql_error()); $Rs = mysql_query($sql); if(@mysql_num_rows($Rs)==0){ echo "<p style='color:red;text-align:center;'> La ricerca non ha prodotto risultati! Indietro </p>"; //exit; } else{ while ($riga = mysql_fetch_array($Rs)) { $loginDB = $riga['login']; $pwd_md5DB = $riga['pwd_md5']; } if($loginDB==($_POST['posted_username']) && $pwd_md5DB==md5($_POST['posted_password'])) $_SESSION['user']=$_POST['posted_username']; } } //creazione cookie per login automatico if(isset($_POST['ricorda']) && isset($_SESSION['user'])){ $cok=md5($login_user)."%%".$pass_user; setcookie("sav_user",$cok,time()+31536000); } //logout if($_GET['logout']==1) { $_SESSION=array(); // Desetta tutte le variabili di sessione. session_destroy(); //DISTRUGGE la sessione. if(isset($_COOKIE['sav_user'])) //se presente si distrugge il cookie di login automatico setcookie("sav_user",$cok,time()-31536000); header("Location: $redirect"); //si ricarica la pagina di login exit; //si termina lo script in modo da ritornare alla schermata di login } //controllo user e passwd da cookie if(isset($_COOKIE['sav_user'])){ $info_cok=$_COOKIE['sav_user']; $cok_user=strtok($info_cok,"%%"); $cok_pass=strtok("%%"); setcookie("sav_user",$info_cok,time()+31536000); if($cok_user==md5($login_user) && $cok_pass==$pass_user) $_SESSION['user']=$login_user; } //caso in cui si vuole ricordare il login, ma i cookie sono off if(!isset($_COOKIE['PHPSESSID']) && isset($_POST['ricorda'])) header("Location: $redirect?nocookie=1"); ?> <HTML> <HEAD> </HEAD> <BODY> <?php $PHPSESSID=session_id(); if(!isset($_SESSION['user'])){ //non siamo loggati, pagina di login if($_GET['nocookie']==1) //i cookie sono off e si vuole ricordare il login print("Spiacente, ma con i cookie disabilitati non posso fare i miracoli ;) Attivali se vuoi ricordare il tuo login. "); print(" <FORM METHOD='POST' ACTION=\"login.php\"> username: <INPUT TYPE='TEXT' SIZE='20' NAME='posted_username'> password: <INPUT TYPE='PASSWORD' SIZE='20' NAME='posted_password'> ricordami: <INPUT TYPE='CHECKBOX' NAME='ricorda' VALUE='1'> <INPUT TYPE='SUBMIT' NAME='SUBMIT' VALUE=\"Loggami\"> "); print("<INPUT TYPE='text' NAME='PHPSESSID' VALUE='$PHPSESSID'>"); if(!isset($_COOKIE['PHPSESSID'])) //i cookie sono off, dobbiamo propagare noi il PHPSESSID print("<INPUT TYPE='text' NAME='PHPSESSID' VALUE='$PHPSESSID'>"); print("</FORM>"); } else{ //siamo loggati pagina riservata $username=$_SESSION['user']; print("Il tuo ID: $PHPSESSID "); print("Sei loggato come: $login_user "); print("<A HREF=\"login.php?logout=1\">logout</A>"); } ?>
Faccio la connessione al DB, estrapolo i dati che mi servono per il confronto, creo un file di sessione ed eventualmente un cookie..
Ho l'opportunità di fare un logout cosi, da cancellare( il contenuto)del file di sessione ed il cookie.
Un'altra cosa.Una volta loggato e riconosciuto, entro e visito quelle pagine protette, ma, per tener attivo l'utente in tutte le pagine come devo fare?
Grazie mille e scusatemi se mi sono dilungato cosi..Ma io devo capire, oltre che studiare![]()