Mantenere una sessione

Oswold

Utente Attivo
7 Ago 2013
81
0
6
Catania
Salve a tutti,
dopo un po' di tempo che sono rimasto fermo ho ripreso il mio studio del php ed ho un nuovo problemino:
ho sistemato il login e diciamo messo in piedi lo script della registrazione (ancora non è un granché sul piano della sicurezza) ma ho notato che una volta effettuato il login se cambio pagina la sessione termina, devo far visualizzare in determinate pagine delle stringhe di codice html solo ad utenti registrati.

Questo è lo script di registrazione:

PHP:
<?php  
if(isset($_POST['submit'])) { 
$connessione=mysql_connect("localhost", "Oswold", "")   
or die ("Non riesco a connettermi");  
$db=mysql_select_db ("Test");  
if (!$db)  
{  
 die ("Connessione al db fallita!".mysql_error());  
}  
$user=$_POST['user']; 
$pass=$_POST['pass'];  
$mail=$_POST['email'];  

// Controlla che i campi siano stati riempiti tutti 
if (empty($_POST['user'])) { echo "<div4>Non hai inserito l'user!</div4>"; goto a; } 
elseif (empty($mail)) { echo "<div4>Non hai inserito l'email</div4>!"; goto a; } 
elseif (empty($pass)) { echo "<div4>Non hai inserito la password!</div4>"; goto a; } 

// Controlla se l'email è valida
if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) { echo "<div4>L'email inserità non è valida!</div4>"; goto a; } 

// Controlla se l'user è già presente 
$username= "SELECT * FROM utenti WHERE username = '$user'"; 
$raw = mysql_query($username); 
//$row = mysql_fetch_array($raw); 
if(mysql_num_rows($raw)>0 ) 
{echo "<div4>Username gia esistente</div4>"; goto a;} 

// Controlla se l'email è già presente 
$email= "SELECT *  FROM utenti WHERE mail = '$mail'"; 
$raws = mysql_query($email); 
//$rows = mysql_fetch_array($raws); 
if(mysql_num_rows($raws)>0 ) 
{echo "<div4>Email già esistente</div4>"; goto a;} 

// Controlla la lunghezza della password 
$Password = 6;
$Password2 = 18;
if(strlen($pass)<$Password&&strlen($pass)>$Password2)
{ echo "<div4>La password non rispetta le restrizioni!</div4>"; goto a; }

$risultato=mysql_query("INSERT INTO utenti (username,password,mail) VALUES ('$user', '$pass', '$mail')") or die(mysql_error());
if($risultato){  
    echo "<div4>Registrazione avvenuta correttamente</div4>";  
    echo "<meta http-equiv='Refresh' content='1; url=Home.html'>";
}else{  
    echo "<div4>ERRORE riprova</div4>";  
}  
}
a:
?>

Questo è lo script di login:

PHP:
<?php  
if(isset($_POST['submit'])) { 
$connessione=mysql_connect("localhost", "Oswold", "")   
or die ("Non riesco a connettermi");  
$db=mysql_select_db ("Test");  
if (!$db)  
{  
 die ("Connessione al db fallita!".mysql_error());  
}  
$user=$_POST['user']; 
$pass=$_POST['pass'];  
$confronto = mysql_query("SELECT * FROM utenti WHERE ((username='$user')&&(password='$pass'))")  or die(mysql_error());
if(mysql_num_rows($confronto)!=0) {
echo "<div4>Login avvenuto con successo</div4>";
echo "<meta http-equiv='Refresh' content='1; url=Rome Total War 2.html'>"; }
else{  
    echo "<div4>Login fallito, riprova!</div4>";  
}  
}
?>

Questo l'ho inserito nelle altre pagine per cercare di mantenere aperta la sessione:

PHP:
<?php

session_start();
$user=$_SESSION['user'];
if((strlen($user)>0))
{  
     echo "<div5>Sei Loggato</div5>";
}
else
{
     echo "<div5>Non sei Loggato</div5>";
}

?>

Però mi visualizza sempre "Non sei Loggato" e se elimino la else mi visualizza "Sei Loggato" quindi credo che ci sia direttamente qualche problema sintattico ma non riesco ad individuarlo! Avete qualche idea?

Un altra domanda... per evitare che inseriscano durante la registrazione nell'user simboli che manderebbero il database in tilt come posso impedire tale inserimento? Visualizzando, poi, un normale echo?
 

edin

Utente Attivo
7 Nov 2013
92
0
6
www.edinweb.altervista.org
Ciao, in questa parte del file dil login devi dare il valore alla variabile di sessione:
PHP:
if(mysql_num_rows($confronto)!=0) {
  $username=mysql_result($confronto,0,'username');
$_SESSION['user']=$username;
echo "<div4>Login avvenuto con successo</div4>";
echo "<meta http-equiv='Refresh' content='1; url=Rome Total War 2.html'>"; }
else{  
    echo "<div4>Login fallito, riprova!</div4>";  
}

e poi manca il session_start() all'inizio della pagina
 

Oswold

Utente Attivo
7 Ago 2013
81
0
6
Catania
PHP:
<?php
session_start();
if(isset($_POST['submit'])) { 
$connessione=mysql_connect("localhost", "Oswold", "")   
or die ("Non riesco a connettermi");  
$db=mysql_select_db ("Test");  
if (!$db)  
{  
 die ("Connessione al db fallita!".mysql_error());  
}  
$user=$_POST['user']; 
$pass=$_POST['pass'];  
$confronto = mysql_query("SELECT * FROM utenti WHERE ((username='$user')&&(password='$pass'))")  or die(mysql_error());
if(mysql_num_rows($confronto)!=0) {
if(mysql_num_rows($confronto)!=0) {
  $username=mysql_result($confronto,0,'username');
$_SESSION['user']=$username;
echo "<div4>Login avvenuto con successo</div4>";
echo "<meta http-equiv='Refresh' content='1; url=Rome Total War 2.html'>"; }
else{  
    echo "<div4>Login fallito, riprova!</div4>";  
}  
}
}
?>

Grazie per la guida, andrò a leggerla senz'altro!
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
ti consiglio di smettere SUBITO di usare mysql e passa a PDO o mysqli, cmq prova a vedere se $username non è vuota in questa maniera
PHP:
<?php 
session_start(); 
if(isset($_POST['submit'])) {  
$connessione=mysql_connect("localhost", "Oswold", "")    
or die ("Non riesco a connettermi");   
$db=mysql_select_db ("Test");   
if (!$db)   
{   
 die ("Connessione al db fallita!".mysql_error());   
}   
$user=$_POST['user'];  
$pass=$_POST['pass'];   
$confronto = mysql_query("SELECT * FROM utenti WHERE ((username='$user')&&(password='$pass'))")  or die(mysql_error()); 
if(mysql_num_rows($confronto)!=0) { 
if(mysql_num_rows($confronto)!=0) { 
  $username=mysql_result($confronto,0,'username'); 
$_SESSION['user']=$username; 

echo $username;
echo '<br> Session  ' . $_SESSION['user'];

echo "<div4>Login avvenuto con successo</div4>"; 
echo "<meta http-equiv='Refresh' content='1; url=Rome Total War 2.html'>"; } 
else{   
    echo "<div4>Login fallito, riprova!</div4>";   
}   
} 
} 
?>
 

edin

Utente Attivo
7 Nov 2013
92
0
6
www.edinweb.altervista.org
Vedi se adesso ti funziona:
PHP:
 <?php 
        session_start(); 
        if(isset($_POST['submit'])) {  
        $connessione=mysqli_connect("localhost", "Oswold", "","Test")    
        or die ("Non riesco a connettermi");   
       
        $user=$_POST['user'];  
        $pass=$_POST['pass'];   
        $confronto = mysqli_query($connessione,"SELECT * FROM utenti WHERE username='".$user."' AND password='".$pass."'")  or die(); 
        if(mysqli_num_rows($confronto)==1) { 
        $row = mysqli_fetch_array($confronto);
        
          $username=$row['username'];
        $_SESSION['user']=$username; 
        echo "<div4>Login avvenuto con successo</div4>"; 
        header("location:pagina.php");
        }
        
        else{   
            echo "<div4>Login fallito, riprova!</div4>";   
        }   
        } 
         
        ?>
 

Oswold

Utente Attivo
7 Ago 2013
81
0
6
Catania
Per Salvo Salvi: La stringa non è vuota, mi visualizza il nome dell'utente!

Per edin: Continua a non funzionare, credo che il problema sia nella parte di codice che inserisco nelle altre pagine per richiamare la sessione ma non capisco dove :crying:
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, impara ad usare i var_dump() in fase di sviluppo
PHP:
<?php

session_start();

var_dump($_SESSION);

$user = $_SESSION['user'];
if ((strlen($user) > 0)) {
    echo "<div5>Sei Loggato</div5>";
} else {
    echo "<div5>Non sei Loggato</div5>";
}
?>
In questo modo verifichi cosa contiene l'intera sessione
ps:
<div5> non è un tag html valido, solo <div>
pps:
usi troppe parentesi (anche nella query)
PHP:
if ((strlen($user) > 0)) {
basta
PHP:
if (strlen($user) > 0) {
 

Oswold

Utente Attivo
7 Ago 2013
81
0
6
Catania
In che senso verifico cosa è contenuto nella sessione?

Div5 è una modifica del classico div in css (posso usare da div0 a div9, l'importante è che li dichiaro all'interno del css)

Mi stampa nella pagina questa parte di codice, quindi non lo legge: "0) { echo "Sei Loggato"; } else { echo "Non sei Loggato"; } ?>" Mi sa che c'è qualche errore qui per questo mi visualizza sempre "Non sei loggato"

Lo so, purtroppo essendo abituato da sempre con il c++ dove le parentesi sono legge, utilizzo qualche conoscenza del quel codice per adattarmi agli altri!
 

Oswold

Utente Attivo
7 Ago 2013
81
0
6
Catania
PHP:
<?php  
        session_start();   
        $connessione=mysqli_connect("", "", "","")     
        or die ("Non riesco a connettermi");    
        if(isset($_POST['submit'])) {  
        $user=$_POST['user'];   
        $pass=$_POST['pass'];    
        $confronto = mysqli_query($connessione,"SELECT * FROM utenti WHERE username='".$user."' AND password='".$pass."'")  or die();  
        if(mysqli_num_rows($confronto)==1) {  
        $row = mysqli_fetch_array($confronto); 
        $username=$row['username'];
        $_SESSION['user']=$user;
        echo "<div4>Login avvenuto con successo</div4>";  
        echo "<meta http-equiv='Refresh' content='1; url=Rome Total War 2.html'>";
        } 
         
        else{    
            echo "<div4>Login fallito, riprova!</div4>";    
        }   
        } 

if (isset($_SESSION['user']))
    { 
        echo("<div5>Sei loggato.</div5>");  
    }     
    else 
    { 
        echo("<div5>Non sei loggato</div5>"); 
    } 
          
?>

Facendo così mi rimane sempre la sessione aperta nella pagina Login anche se cambio pagina ma... se inserisco questo codice in un altra pagina:

PHP:
<php

session_start();   
$connessione=mysqli_connect("", "", "","")     
or die ("Non riesco a connettermi");    

$username=$_SESSION['user'];


if (isset($username))
    { 
        echo("<div5>Sei loggato, puoi fare il logout cliccando sotto.</div5>");  
    }     
    else 
    { 
        echo("<div5>Non sei loggato, fai il login</div5>"); 
    } 

?>

Mi da in errore i due echo.
Se provo a far stampare la sessione me la da vuota quindi il problema sta nel passaggio della sessione in questa pagina! Credo che abbia esaurito tutte le possibilità stavolta :\
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
ma reindirizzi ad una pagina html ?
Codice:
url=Rome Total War 2.html
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
non puo non cambiare nulla: una pagina html non è in grado di interpretare codice php
metti il var_dump come ti avevo detto sulla pagina php e posta quello che ti stampa
PHP:
var_dump($_SESSION);
 

Oswold

Utente Attivo
7 Ago 2013
81
0
6
Catania
Mi da come errore l'interno dei due echo, come prima, nulla di più o nulla di meno

PHP:
Sei loggato, puoi fare il logout cliccando sotto."); } else { echo("Non sei loggato, fai il login"); } ?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
non sono errori , ti stampa cosi perchè l'estensione del file non è php
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Sei loggato, puoi fare il logout cliccando sotto."); } else { echo("Non sei loggato, fai il login"); } ?>
se questo è quello che vedi nella pagina o il file non ha estensione php o l'host non ha il supporto php, non vedo alternative
in ogni caso il php non viene interpretato
 
Discussioni simili
Autore Titolo Forum Risposte Data
A Mantenere il focus su di una inputbox Javascript 1
S mantenere le modifiche in un file php PHP 2
S [PHP] Come mantenere selezionato checkbox dopo aver cliccato submit PHP 7
A Mantenere la validazione reindirizzandoci su un secondo sito WEb. (ASP.NET) ASP.NET 0
I [Javascript] mantenere un bottone abilitato al refresh della pagina Javascript 1
M [PHP] Mantenere variabile con datagrid nella pagina 2 PHP 1
S [PHP] Mantenere selezionato il valore scelto dopo submit PHP 16
F Mantenere selezione immagine Javascript 1
M [PHP - MYSQL] Mantenere filtro query in tabelle paginate PHP 3
G Freelancer: quanto costa aprire e mantenere la partita IVA? Discussioni Varie 3
N Ciclare sul DB e mantenere i dati PHP 3
P Mantenere valore di un form anche dopo refresh PHP 6
asevenx mantenere sessione login attiva anche in altre pagine PHP 8
Y mantenere sessione login? PHP 5
S Mantenere dati form in memoria PHP 29
N Mantenere scelte fatte in un form PHP 5
A Mantenere le proporzioni Photoshop 3
L Convalidare form e mantenere il valore PHP 5
T Mantenere la posizione della pagina dopo postback PHP 1
E Flash mantenere un livello sempre animato Flash 1
J Come mantenere lo stato del "creator"? Javascript 0
S Ereditare e Mantenere Collegate Proprieta Flash 0
E Mantenere la stessa pagina cambianto il contenuto Classic ASP 1
opeth978 mantenere le informazioni PHP 19
C asp: mantenere l ostato 2 consigli Classic ASP 2
G Combo ... mantenere la selezione fatta Classic ASP 0
P C# Salvare una colonna del DataGridView XML 0
M pulsante per aprire una maschera che contiene controllo schede MS Access 0
M Leggere in un report il valore di una casella combinata di una maschera Database 0
D Miglior modo per estrarre le occorrenze di un elemento in un set di più file xml e quindi scrivere il risultato in una tabella Excel o magari in JSON XML 0
S [VB.NET]: Coordinate immagini dentro una PictureBox Visual Basic 0
I stampare una stringa echo PHP 2
MarcoGrazia Riprendere una sessione interrotta PHP 0
L Rendere una parte trasparente Photoshop 3
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
K Visualizzare del html responsive in una Webview Sviluppo app per Android 0
otto9due Ordinare option di una select Javascript 5
N Come si crea una variabile dinamica da incrementare? Javascript 1
L Eliminazione di una pagina dalla gallery SEO e Posizionamento 0
otto9due Proteggere una cartella e file con password tramite .htaccess e .htpasswd Web Server 0
L Riempimento di una tabella al click di un bottone Javascript 1
R Variabile non risconosciuta dentro una funzione PHP 1
C ACCESS Aprire maschera se valore non presente in una combo MS Access 7
A media degli elementi estratti da una query MySQL 0
spider81man Eliminare primo ed ultimo carattere di una colonna MySQL 0
pacemattia408 disattivazione di una function Javascript 4
G Eliminare l'effetto refresh di una pagina internet PHP 8
otto9due Inserire o aggiornare tabella my sql controllando una coppia di valori PHP 7
M Select Option dentro una Table jQuery 2
Couting95 inserire dati da un file di testo in una tabella in php PHP 1

Discussioni simili