Mantenere una sessione

  • Creatore Discussione Creatore Discussione Oswold
  • Data di inizio Data di inizio

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?
 
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
 
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!
 
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>";   
}   
} 
} 
?>
 
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>";   
        }   
        } 
         
        ?>
 
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:
 
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) {
 
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!
 
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 :\
 
ma reindirizzi ad una pagina html ?
Codice:
url=Rome Total War 2.html
 
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);
 
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"); } ?>
 
non sono errori , ti stampa cosi perchè l'estensione del file non è php
 
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