Sessione php

Lorenzo Pezzi

Nuovo Utente
22 Set 2015
23
0
1
Ciao ragazzi mi stavo cimentando sulle sessioni php ma non sono riuscito a risolvere il mio problema:

Ho una pagina di inserimento che non postero, comunque fa il suo e inserisce username email e password.

Poi ho una pagina login. Avvio la sessione all'inizio. Sessione che distruggo se la query non va a buon fine. Sessione che riempio con logged=1 e il nome.

PHP:
<?php session_start();?>

<?php
 include"connessione.php"
?>

<?php 
//$pass=md5($_POST['pass']);
$query ="SELECT * FROM login WHERE username='{$_POST['user']}' AND password='{$_POST['pass']}'";

$res=mysql_query($query);

if ((!$res) OR (mysql_num_rows($res)==0)){
	echo"credenziali errate!!";
	session_unset();
	session_destroy();
	exit;
}else{

$_SESSION['logged']=1;
$_SESSION['user']=$_POST['user'];

header("location: http://www.provee.altervista.org/loginok.php");
}
?>

Se esiste l user a la password dopo aver riempito $_session, indirizzo verso l'altra pagina. Dove riapro la sessione e controllo se il parametro logged è =1. Se è uguale vuol dire che il login nell'altra pagina è andata a buon fine e quindi riceve il benvenuto, altrimenti no.

PHP:
<?php session_start();?>

<!DOCTYPE html>
<head>
	<title>BENVENUTO!!</title>
</head>
<body>
<?php

	if($SESSION['logged']==1){
    	echo"Benvenuto".$_SESSION['user'];
	}else{
    	echo"devi loggarti";
        session_unset();
        session_destroy();
    }


?>

Mi dice sempre che devo loggarmi anche se inserisco i dati esatti.

Grazie a tutti
 
Dopo il tag body dove c'è l'if manca il trattino basso in $_SESSION

Inviato dal mio GT-I9300 utilizzando Tapatalk

Ok mi sento un po stupido. Come prima cosa ti ringrazio e poi volevo chiederti 2 cose.
1 per tutte le altre pagine devo mantenere il controllo logged=1?
2 le variabili $_session[] si azzerano solo dopo che si è chiuso il browser (oltre che manualmente in caso di codice)?

Se hai qualche consiglio sono ben accetti :)
 
Si esattamente, il controllo deve essere inserito in tutte le pagine protette.

La questione di "azzerare" le sessioni è un po' più complessa di quello che sembra, cercherò di spiegartela nel modo più semplice.
Praticamente quando avvii la sessione, si crea un cookie con un id nel browser, questo id fa si che il server riconosca il client, dando accesso a quei dati che salvi in sessione (come in questo caso l'autenticazione) ecc...
Quando si chiude il browser teoricamente il cookie dovrebbe cancellarsi, ma può capitare che rimangano sul pc dei processi attivi dello stesso browser, quindi anche dopo averlo chiuso il cookie non si cancella e dopo averlo riaperto ti farebbe riaccedere all'area protetta.
Comunque c'è da tenere presente che la sessione non viene comunque distrutta chiudendo il browser, ma solo il sopracitato cookie, quindi se la sessione non viene terminata dall'apposito comando via php, questa rimane allocata nella memoria del server finchè non viene cancellata dal Garbage Collector.

Tieni a mente queste cose per gestire al meglio le sessioni, spero di esserti stato utile :)
 
Si esattamente, il controllo deve essere inserito in tutte le pagine protette.

La questione di "azzerare" le sessioni è un po' più complessa di quello che sembra, cercherò di spiegartela nel modo più semplice.
Praticamente quando avvii la sessione, si crea un cookie con un id nel browser, questo id fa si che il server riconosca il client, dando accesso a quei dati che salvi in sessione (come in questo caso l'autenticazione) ecc...
Quando si chiude il browser teoricamente il cookie dovrebbe cancellarsi, ma può capitare che rimangano sul pc dei processi attivi dello stesso browser, quindi anche dopo averlo chiuso il cookie non si cancella e dopo averlo riaperto ti farebbe riaccedere all'area protetta.
Comunque c'è da tenere presente che la sessione non viene comunque distrutta chiudendo il browser, ma solo il sopracitato cookie, quindi se la sessione non viene terminata dall'apposito comando via php, questa rimane allocata nella memoria del server finchè non viene cancellata dal Garbage Collector.

Tieni a mente queste cose per gestire al meglio le sessioni, spero di esserti stato utile :)

Quindi puo accadere che anche chiudendo il browser la sessione rimanga attiva se non chiusa da codice. Ma comunque accessibile sempre dallo stesso id quindi dallo stesso utente.
 
Quindi puo accadere che anche chiudendo il browser la sessione rimanga attiva se non chiusa da codice. Ma comunque accessibile sempre dallo stesso id quindi dallo stesso utente.

La sessione rimane allocata nel server fino a che non viene distrutta da codice (session_destroy), oppure se non più "attiva" ripulita dal Garbage Collector. Quindi anche se chiudi il browser la sessione rimane comunque attiva all'interno della memoria del server se non si verificano le due condizioni sopra descritte.

Se chiudi il browser si cancella solo il cookie con l'id sessione che ti permette di accedere ai dati di sessione allocati nel server.
 

Discussioni simili