Creazione sistema di login

  • Creatore Discussione Creatore Discussione Emix
  • Data di inizio Data di inizio

Emix

Utente Attivo
15 Feb 2010
596
0
16
Salve a tutti,
sono nuovo ma leggo il forum abitualmente e con molta frequenza, fin ora non mi era mai servito postare, dato che, o con l'aiuto delle guide e \ o tutorial e sia con l'aiuto del tasto cerca, ero sempre riuscito a risolvere.
Ora ho un problemino.. Io dovreif are uno script di login, ho gia creato ovviamente la pagina del form.
La pagina php invece sono rimasto bloccato cosi.

Riesco a connettermi al database, riesco a selezionarlo, riesco a fare una ricerca e ovviamente restituire vero o falso (0 o 1).
ora il problema è . Come faccio a farlo rimanere loggato? come faccio un redirect che gli dice che si è autenticato? come gestisco la sessione e in modo che quando chiude l'IE , se non spunta rimani loggato, farlo eliminare dagli utenti connessi? Ciao e Grazie.
 
ciao
Come faccio a farlo rimanere loggato? come faccio un redirect che gli dice che si è autenticato? come gestisco la sessione e in modo che quando chiude l'IE , se non spunta rimani loggato, farlo eliminare dagli utenti connessi?
la sessione scade quando chiudi il bw, quindi (in caso di spunta) per farlo rimanere loggiato o usi i cookie o fai aun'apposita tabella nel db
 
ciao
io uso le sessioni in quanto a mio parere se uno che esce dal bw non dovrebbe rimanere loggato,
e mi piacciono poco i cookie (e qundi non so usarli bene, o viceversa).
generalmente io faccio così (anche se semplifico);
pagina di log login.php con il form
PHP:
<?php
if(!isset($_SESSION)){session_start ();}//in TUTTE le pagine in cui uso le sessioni
/*serve perchè l'utente non debba riscrivere user e password
se è un utente autorizzato*/
if(isset($_SESSION['usn']){$usn=$_SESSION['usn'];}else{$_SESSION['usn'];==""}
if(isset($_SESSION['pas']){$pas=$_SESSION['pas'];}else{$_SESSION['pas'];==""}
?>

<form action="passator_cortese.php" method="post">
inserisci username<input name="usn" type="text" value="<?php echo $usn;?>">
inserisci password<input name="pas" type="text" value="<?php echo $pas;?>">
</form>

faccio la pagina passator_cortese.php (che nome:rolleyes:) che è solo una pagina di transito e di verifica
che non viene visualizzata dall'utente in quanto non ha out html

PHP:
<?php
//creo la sessione
if(!isset($_SESSION)){session_start ();}//in TUTTE le pagine in cui uso le sessioni
//verifico di provenire da login.php e non digitando sul bw il nome della pagina
if(basename($_SERVER['HTTP_REFERER']) != 'login.php'){
	//non provengo da login.php
	unset($_SESSION);
	//distuggo eventuali sessioni e quindi rimando a login
	@header('Location:login.php');
}else{
	//ho verificato che provengo da login
	//collegamento al db
	//verifiche sui post ....e li leggo
	$usn=$_POST['usn'];
	$pas=$_POST['pas'];
	//interrogo il db, non ho messo la codifica dell'user e pass
	$query=mysql_query("SELECT * FROM urtenti_registrati WHERE usn='$usn' and pas='$pas'");
	//verifico che esista un utente con tale username e tale password
	$esiste=mysql_num_rows($query);
	//se $esiste == 0 non cè
	if($esiste > 0){//esiste
		//estraggo usn e pass
		$rows=mysql_fetch_array($query);
		//e li passo in sessione
		$_SESSION['usn']=$rows['usn'];
		$_SESSION['pas']=$rows['pas'];
		//accedo alla/alle pag riservate
		@header('Location:pagina_riservata.php');
	}else{//non esiste
		unset($_SESSION);
		@header('Location:login.php');
	}
}
?>

tutte le pagine riservate iniziano con
PHP:
<?php
if(!isset($_SESSION)){session_start ();}//in TUTTE le pagine in cui uso le sessioni
//verifico l'esistenza delle sessioni
if(!isset($_SESSION['usn']) || !isset($_SESSION['pas']){
	//le sessioni non esistono per cui riinvio al login (o alla pagina che voglio)
	@header('Location:login.php');
}
//ecc, ecc.....
?>

prendi quello che ho scritto come un esempio, adattandolo alle tue esigenze, comunque prova, se non funzia come vuoi siamo qui
 
innanzi tutto grazie per la risposta cosi esaustiva e soprattutto cosi rapida. :)
Ora faccio delle prove e vi diro il riscontro :):fonzie:
 
ciao
semplificando (e col copia/incolla) ho fatto un errore:crying:
//......
if(isset($_SESSION['usn']){$usn=$_SESSION['usn'];}else{$usn=""}
if(isset($_SESSION['pas']){$pas=$_SESSION['pas'];}else{$pas=""}
//.........
 
Comunque, per quanto riguarda il sistema "rimani loggato", è più semplice di quello che sembri. Praticamente hai bisogno di una tabella del database in cui memorizzare l'ID di sessione, l'ID dell'utente e la data di scadenza del login.
Poi, quando l'utente effettua il login, e seleziona la scadenza, tu salvi i dati nel database, salvi l'ID utente nella sessione, e l'ID di sessione in un cookie.
Quando invece l'utente accede alla pagina controlli se esiste un cookie con l'ID di sessione e se trova un riscontro nel database. Se sì, crei una sessione con l'ID utente salvato nel database.
Mi rendo conto che così non è facile, però è più semplice a farsi che a dirsi. In realtà la scadenza "per sempre", non esiste, perché i cookie hanno una scadenza massima, che, attualmente, è di 11 anni. Io uso 10 per arrotondare, e direi che sono abbastanza! :D
Però, ora che ci penso, potrei incrementare di tot secondi la scadenza del cookie ad ogni accesso dell'utente. Ma questa è una cosa avanzata, e non penso che a te serva.
Se hai problemi e dubbi (dopo la mia spiegazione ne avrai più di prima, immagino! :D) fammi sapere.
 
ma che centra? O_O cioè mi spiego che centra quello che ha scritto l'utente con la mia richiesta\domanda?

Cmq sono riuscito a testare quella parte di codice.. ma sinceramente non mi sembra chiara.. Vi spiego meglio a cosa devo arrivare...
Il mio obiettivo è quello di creare un login che funzioni in questa maniera :
  • Registrazione (registrazione.htm)( Connetto DB inserisco dati)
  • Login (login.php)(inserisco user e pass,connetto DB,verifico esistenza, genero una variabile booleana per dichiarare se autorizzato o non) (qui ho bisogno delle sessioni)
  • Pagina Protetta (protetta.php) ( Funzione da richiamare in caso voglia proteggere una pagina ai solo iscritti)
  • Recupera Dati (recupera_dati.php) (Connetto DB controllo esistenza email, rimando all'email i suoi dati con link per il cambio password)(richiamo le sessioni)
  • Registrazione con autorizzazioni e convalida tramite email

Questo è ciò a cui devo arrivare.
Premetto non mi interessano script preconfezionati a mode CMS altrimenti utilizzavo Joomla e via.
Voglio arrivare a questo risultato da SOLO (ovviamente intendo creando e scrivendo il codice da solo, ma chiedendo aiuto ove serve)
Grazie ancora per le risposte :)
 
ciao emix
scusa ma scorrendo i post non mi ero accorto che un altro utente si era intrufolato, e quindi pensavo che la richiesta fosse tua.

...Voglio arrivare a questo risultato da SOLO...
, bene.
comincia a scrivere le pagine, poi se hai bisogno siamo qui
 
Ultima modifica:
d'accordissimo con te infatti io la pagina di registrazione e login la ho. il mio problema sono le sessioni (vedi post addietro). Io riesco a far registrare l'utente (inserimento dati dentro db) e riesco a controllare se esiste o meno stampando qualcosa a video.
Ora non so come far rimanere loggato l'utente finche non chiude browser e non so come farlo rimanere loggato anche dopo (cookie).
In tutto ciò mi è venuta in mente un altra cosa.
Se io effettuo login, come faccio a far stampare a video per X secondi il msg di avvenuto login e il redirect a un altra pagina ? grazie ancora. Molto ma molto cordiali e gentili, ma sopratutto preparati.
 
ciao
Ora non so come far rimanere loggato l'utente finche non chiude browser e non so come farlo rimanere loggato anche dopo (cookie).
per rimanere loggato sino alla chiusura del bw, ti avevo gia risposto (vedi il post con scripit: la seconda parte)
per rimanere loggato anche dopo la chiusura guarda cosa ti aveva scritto alex.
anche se non mi sembra giusto rimanere loggati dopo la chiusura del bw perchè entrare nel tuo sito e loggarmi è un'azione volontaria mia. chiudo il bw e vado a prendere il caffè, pinco può sedersi al mio posto (anche dopo alcuni giorni) e (essendo sempre loggato) può scrivere/fare quello che vuole passando per me
 
borgo, è per questo che hanno inventato una cosa che si chiama "account" ed è molto utile. Praticamente ogni utente di un computer ha dei cookie diversi, e non sono condivisi. Chi ci ha pensato è un vero genio, non è neanche una cosa tanto vecchia... :D

Comunque anche tu hai ragione (strano!), però prova a pensare: quanti sono gli utenti paranoici che vogliono disconnettersi ad ogni chiusura del browser, e quanti invece quelli che si rompono a dover fare ogni volta il login? Poi, se chiudendo il browser voglio disconnettermi perché ho paura che pinco distrugga la mia reputazione online, hanno, sempre recentemente, inventato un sistema chiamato "logout". Ah, questa tecnologia... ma dove arriveremo? :D
 
ciao
Ah, questa tecnologia... ma dove arriveremo?
al computer che fa anche il caffè (spero).
comunque ancora non è facile trovare utenti con un computer che riconosca (web cam e/o riconoscimento vocale?) chi gli sta seduto di fronte, quindi comunque per riconoscere l'utente questi (il computer) deve far inserire un qualcosa che lo riconosca (vedi nota) e quindi tanto vale ripetere il login se uno è uscito dal bw.



nota:
a te ti riconoscono dappertutto...e scappano:D
 
asd, nonostante tutto stasera posto la parte del codice che son riuscito a fare cosi mi aiutate.

P.s: borgo hai msn o qualsiasi altro instant messanger? magari parliamo in tempo reale.

Grazie ancora a tutti!
 
ciao
vediamo il codice

...borgo hai msn o qualsiasi altro instant messanger?...
mi spiace, ma come direbbe alex, sono "antiquato", se vuoi scrivermi personalmete o usi la messaggistica del forum o mi invii em a info[at]borgo-italia.it
 
mhmh quindi stiamo da capo a dodici.. ossia sempre aspettando risposte.. tanto vale usare il forum. Grazie cmq.
 
ciao
Se io effettuo login, come faccio a far stampare a video per X secondi il msg di avvenuto login e il redirect a un altra pagina ?

secondo me puoi fare in due modi, pero entrambi presentano un difetto
nella pagina che ho chiamato passator_cortese.php
PHP:
//............
 if($esiste > 0){//esiste 
        //estraggo usn e pass 
        $rows=mysql_fetch_array($query); 
        //e li passo in sessione 
        $_SESSION['usn']=$rows['usn']; 
        $_SESSION['pas']=$rows['pas']; 
        //accedo alla/alle pag riservate 
        @header('Location:pagina_riservata.php'); 
    }else{//non esiste 
        unset($_SESSION); 
//.....................
al posto di
PHP:
@header('Location:pagina_riservata.php');
puoi mettere

PHP:
echo "grazie di esserti loggato, tra 4 secondi verrai reinidirizzato alla tua pagina";
echo "<meta http-equiv='Refresh' content='4; URL=pagina_riservata.php'>";

oppure utilizzando js

nell'head metti (o con file esterno)

Codice:
<script type="text/javascript" language="JavaScript">
<!--
//eventualmente cambiare url sotto
var targetURL="pagina_riservata.php"
//modifica i secondi di attesa
var countdownfrom=4
var currentsecond=document.redirect.redirect2.value=countdownfrom+1
function countredirect(){
if (currentsecond!=1){
currentsecond-=1
document.redirect.redirect2.value=currentsecond
}
else{
window.location=targetURL
return
}
setTimeout("countredirect()",1000)
}
countredirect()
//-->
</script>

e sempre al posto di
PHP:
@header('Location:pagina_riservata.php');

PHP:
?>
<form name="redirect" class="Stile5">
   tra
     <input type="text" size="2" name="redirect2">
   secondi sarai reindirizzato alla pagina riservata
</form>
<?php

il difetto è che se uno mentre è in attesa dei 4 secondi con visualizza sorgente vede
il nome della pagina riservata
 
Per evitarlo puoi fare così:
PHP:
header('Refresh: 4; URL=pagina_riservata.php');
echo "grazie di esserti loggato, tra 4 secondi verrai reinidirizzato alla tua pagina";
In modo che l'header venga inviato direttamente da PHP. Comunque a me cosa interessa che l'utente loggato veda la pagina riservata? Tanto appena redirezionato la vede dall'URL!
 

Discussioni simili