View Full Version : [PHP] login session multiplo
trinakrius
27-01-2012, 19:53
salve, ho un problema. non riesco a trovare il modo di tenere le pagine in sessione dopo il login. voglio che ogni utente, nel mio caso 3 utenti, dopo aver effettuato il login acceda ad una o più pagine personalizzate, il problema è che la pagina di riferimento per ognuno dei 3 utenti sono accessibile anche senza il login.... come posso fare in modo che le pagine utente1.php, utente2.php e utente3.php siano accessibili solo dopo il login?
index.html con il mio form:
<form id="form1" name="form1" method="post" action="utenti.php">
<fieldset><legend>Area riservata</legend>
<p>
<label for="textfield">Username</label>
<input type="text" name="username" tabindex="10" id="textfield" />
</p>
<p>
<label for="label">Password</label>
<input type="password" name="password" id="label" />
<label for="Submit"></label>
<input name="Submit" type="submit" class="submit" id="Submit" tabindex="30" value="Invia" />
</p>
utenti.php per elaborare il tipo di utente:
<?php
$username = $_POST['username'];
$password = $_POST['password'];
if ($username == "111" && $password == "111")
{
echo "<center><h2><font color=#009900>Benvenuto nell'area riservata.</font></h2><br><a href=utente1.php>Clicca qui per continuare.</a></center>"; exit ();
}
elseif ($username == "222" && $password == "222")
{
echo "<center><h2><font color=#009900>Benvenuto nell'area riservata.</font></h2><br><a href=utente2.php>Clicca qui per continuare.</a></center>"; exit ();
}
elseif ($username == "333" && $password == "333")
{
echo "<center><h2><font color=#009900>Benvenuto nell'area riservata.</font></h2><br><a href=utente3.php>Clicca qui per continuare.</a></center>"; exit ();
}
else
{
echo "<center><h2><font color=#FF0000><h2>Accesso negato.</font></h2><br>Le credenziali inserite non risultano valide.<br><a href=\"javascript:history.go(-1)\">Clicca qui per tornare al form e reinserire username e password.</a></center>"; exit();
}
?>
non so cosa inserire nelle pagine utente1.php, utente2.php e utente3.php per proteggere la sessione....help me è importante per me
Ciao, non sono molto esperto ma ti dico come risolvo solitamente la questione..
Nelle pagine utente devi inserire un if di controllo di una session che crei nella pagina prima.
Nella pagina utenti.php una volta che hai verificato la password e l'username prima di procedere mostrandogli il link per l'area riservata crei una session
$_SESSION['nome_session'] = $var;
come variabile puoi assegnargli il nick o la password dell'utente. Poi quando entri nella pagina dell'area privata (utente1.php, utente2.php e utente3.php) devi verificare il valore della session facendo:
if(isset($_SESSION["nome_session"])) //verifica che la session esiste
if($_SESSION["nome_session"]=="stringa") //verifica il valore della session
ah ricordati di inizializzare le session altrimenti non funzionano. il comando per farlo è:
session_start();
trinakrius
27-01-2012, 21:46
grazie ma non riesco ancora a capire come posizionarle
allora nel file utenti.php
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$_SESSION['username']=$username;
if ($username == "111" && $password == "111")
{
echo "<center><h2><font color=#009900>Benvenuto nell'area riservata.</font></h2><br><a href=utente1.php>Clicca qui per continuare.</a></center>"; exit ();
}
elseif ($username == "222" && $password == "222")
{
echo "<center><h2><font color=#009900>Benvenuto nell'area riservata.</font></h2><br><a href=utente2.php>Clicca qui per continuare.</a></center>"; exit ();
}
elseif ($username == "333" && $password == "333")
{
echo "<center><h2><font color=#009900>Benvenuto nell'area riservata.</font></h2><br><a href=utente3.php>Clicca qui per continuare.</a></center>"; exit ();
}
else
{
echo "<center><h2><font color=#FF0000><h2>Accesso negato.</font></h2><br>Le credenziali inserite non risultano valide.<br><a href=\"javascript:history.go(-1)\">Clicca qui per tornare al form e reinserire username e password.</a></center>"; exit();
}
?>
nelle pagine utente1 utente2 e utente3
<?
session_start();
if(!isset($_SESSION["username"])){
include("error.htm"); //pagina d'errore
die();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Utente1</title>
</head>
<body>
<h2 align="center">pagina utente numero 1</h2>
</body>
</html>
cosa non va, scusami ma non riesco proprio
nessun problema.. non funzionano mai al primo tentativo :)
L'errore potrebbe essere in utenti.php dove non hai messo session_start();
inoltre c'è un errore di logica (secondo me):
Se tu vuoi gestire il login di un utente la session la crei solo nel momento in cui l'utente inserisce le corrette credenziali.. se l'utente inserisce dati errati lo rimandi all'index con un messaggio d'errore.
Quindi la pagina utenti.php sarà:
<?php
$username = $_POST['username'];
$password = $_POST['password'];
session_start();
if ($username == "111" && $password == "111")
{ $_SESSION['username']=$username;
echo ....
}
elseif ($username == "222" && $password == "222")
{ $_SESSION['username']=$username;
echo ....
}
elseif ($username == "333" && $password == "333")
{ $_SESSION['username']=$username;
echo ....
}
else
{
echo "<center><h2><font color=#FF0000><h2>Accesso negato.</font></h2><br>Le credenziali inserite non risultano valide.<br><a href=\"javascript:history.go(-1)\">Clicca qui per tornare al form e reinserire username e password.</a></center>"; exit();
}
?>
Prova in questo modo!
trinakrius
27-01-2012, 22:10
non va ancora, mi fa ancora accedere tranquillamente alle pagine dei 3 utenti anche prima del login.... sto cercando ma non riesco a trovare la chiave.... azzarola!!!!
...ma perchè usi una pagina diversa per ogni utente? E se avessi 50 utenti? Dovresti avere 50 pagine .php e un if-else con 50 rami?? :confused:
Comunque sia... potresti mettere un ulteriore controllo nelle pagine degli utenti quindi ad esempio nella pagina utente1.php sostituisci quell'if iniziale con qualcosa del genere:
if(isset($_SESSION['username']) && $_SESSION['username'] == '111' && isset($_SESSION['password']) && $_SESSION['password'] == '111')
{
// L'utente è davvero loggato
}
else
{
// Utente non loggato. Stampare messaggio di errore che vuoi tu
}
E così via con le altre pagine degli altri utenti... Ripeto: mi sembra un sistema molto poco elegante...
allora il problema credo che risieda nella pagine utente1.php, utente2.php e utente3.php
Sinceramente non ho mai usato le istruzioni
include("error.htm"); //pagina d'errore
die();
quindi non sò cosa facciano.. prova a rifare la pagina così
<body>
session_start();
if(isset($_SESSION["username"]) && $_SESSION["username"])=='111')
{
benvenuto utente 111
}
else
{ echo "torna all'index per accedere";
}
</body>
Senza l'else, anche se l'if che hai messo tu non è verificato, rimane alla stessa pagina e quindi la visualizza normalmente.. Può essere questo il problema
...ma perchè usi una pagina diversa per ogni utente? E se avessi 50 utenti? Dovresti avere 50 pagine .php e un if-else con 50 rami?? :confused:
Comunque sia... potresti mettere un ulteriore controllo nelle pagine degli utenti quindi ad esempio nella pagina utente1.php sostituisci quell'if iniziale con qualcosa del genere:
if(isset($_SESSION['username']) && $_SESSION['username'] == '111' && isset($_SESSION['password']) && $_SESSION['password'] == '111')
{
// L'utente è davvero loggato
}
else
{
// Utente non loggato. Stampare messaggio di errore che vuoi tu
}
E così via con le altre pagine degli altri utenti... Ripeto: mi sembra un sistema molto poco elegante...
Bhe ma io credo che stia solo facendo delle prove.. voglio dire se guardi anche il controllo per verificare il nick e la password non si devono verificare in quel modo :)
Bhe ma io credo che stia solo facendo delle prove.. voglio dire se guardi anche il controllo per verificare il nick e la password non si devono verificare in quel modo :)
Siamo d'accordo, ma il fatto che siano prove giustifica le password cablate nel codice... ma non che ci siano tanti file quanti sono gli utenti. Che prova è? :sofico: Poi per carità: sono scelte... ;)
ahahah :D sisi hai ragione anche te.. bho magari aveva uno scopo che poi si è perso non riuscendo a gestire le session.. :mc:
trinakrius
28-01-2012, 08:52
ahahah :D sisi hai ragione anche te.. bho magari aveva uno scopo che poi si è perso non riuscendo a gestire le session.. :mc:
ti quoto in pieno... sapete qual'è il problema? è che devo fare questo sito in tempi brevissimi e so che la soluzione migliore sarebbe creare un database da circa 50 record, ma col mac non riesco ad usare SequelPro e non trovo neanche una guida... questo è il motivo per cui sono costretto a creare un codice pesante per poi ottimizzarlo in futuro.
vi ringrazio per il vostro aiuto, finalmente un forum valido... se poi volete darmi una mano con la creazione del db sarebbe il massimo!!!
adesso vado a lavoro, di pome provo la soluzione datami sopra e vi faccio sapere
trinakrius
28-01-2012, 16:48
niente da fare .... adesso se accedo ad utenti1,2 e 3 non compare nulla.....che dite?
niente da fare .... adesso se accedo ad utenti1,2 e 3 non compare nulla.....che dite?
Facciamo un pò di ordine e vediamo in dettaglio come dovrebbero essere tutti i file.
index.php (è tale e quale!)
<form id="form1" name="form1" method="post" action="utenti.php">
<fieldset><legend>Area riservata</legend>
<p>
<label for="textfield">Username</label>
<input type="text" name="username" tabindex="10" id="textfield" />
</p>
<p>
<label for="label">Password</label>
<input type="password" name="password" id="label" />
<label for="Submit"></label>
<input name="Submit" type="submit" class="submit" id="Submit" tabindex="30" value="Invia" />
</p>
utenti.php
<?php
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
if ($username == "111" && $password == "111")
{
$_SESSION['username'] = '111';
$_SESSION['password'] = '111';
echo "<center><h2><font color=#009900>Benvenuto nell'area riservata.</font></h2><br><a href=utente1.php>Clicca qui per continuare.</a></center>"; exit ();
}
elseif ($username == "222" && $password == "222")
{
$_SESSION['username'] = '222';
$_SESSION['password'] = '222';
echo "<center><h2><font color=#009900>Benvenuto nell'area riservata.</font></h2><br><a href=utente2.php>Clicca qui per continuare.</a></center>"; exit ();
}
elseif ($username == "333" && $password == "333")
{
$_SESSION['username'] = '333';
$_SESSION['password'] = '333';
echo "<center><h2><font color=#009900>Benvenuto nell'area riservata.</font></h2><br><a href=utente3.php>Clicca qui per continuare.</a></center>"; exit ();
}
else
{
$_SESSION['username'] = 'anonimo';
$_SESSION['password'] = 'anonimo';
echo "<center><h2><font color=#FF0000><h2>Accesso negato.</font></h2><br>Le credenziali inserite non risultano valide.<br><a href=\"javascript:history.go(-1)\">Clicca qui per tornare al form e reinserire username e password.</a></center>"; exit();
}
?>
utente1.php
<?php
session_start();
if(isset($_SESSION['username']) && $_SESSION['username'] == '111' && isset($_SESSION['password']) && $_SESSION['password'] == '111')
{
// L'utente è davvero loggato
echo "<h1>Ciao utente 111, questa è la tua pagina personalizzata</h1>";
}
else
{
// Utente non loggato. Stampare messaggio di errore che vuoi tu
echo "<h1>ERRORE: Non sei autorizzato ad accedere a questa risorsa.</h1>";
}
?>
Ovviamente le altre pagine (utente2.php, utente3.php, ecc...) sono assolutamente simmetriche a quella che ti ho postato sopra. Se non è ti è chiara qualcosa, chiedi pure... :)
P.S. Inutile dire che questo sistema di login è ALTAMENTE insicuro... Dovresti complicarlo a piacere...
trinakrius
29-01-2012, 08:43
grazie Mttiu_ adesso va alla grande.... adesso ci siamo grazie mille!!!!
trinakrius
29-01-2012, 10:07
adesso sto provando ad inserire un cookie... una cosa non rieco a capire, non devo passargli variabile delle sessione no? cioè una volta attiva la sessione rileva il cookie inviato dal server?
devo posizionarlo in tutte le pagine utenti1,2,3 o solo nella utenti.php?
adesso sto provando ad inserire un cookie... una cosa non rieco a capire, non devo passargli variabile delle sessione no? cioè una volta attiva la sessione rileva il cookie inviato dal server?
devo posizionarlo in tutte le pagine utenti1,2,3 o solo nella utenti.php?
Non sono sicuro di aver capito bene la domanda :D
Quello che abbiamo fatto fino ad ora è un session-cookie cioè un "cookie" che esplode non appena chiudi il browser (se lo chiudi devi rifare il login)... Per fare un cookie vero e proprio (cioè che dura anche se chiudi il browser o spegni il pc) devi usare la funzione setcookie (il cui manuale trovi qui http://php.net/manual/en/function.setcookie.php).
Sia nelle session che nei cookie decidi tu cosa metterci e come utilizzarli...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.