scadenza sessioni

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
sale ragazzi; ho quessto codice che serve per determinare il login o il logout di un utente; ma come posso fare in modo che dopo un determinato tempo la sessione ($_SESSION['authorized']) scade?

Codice:
[COLOR="blue"]<?php[/COLOR] 

//recuper i valori di username e password per il confronto
[COLOR="blue"]require_once[/COLOR] [COLOR="red"]'config.inc.php'[/COLOR];

[COLOR="blue"]function [/COLOR][COLOR="red"]loggedIn[/COLOR](){
 [COLOR="blue"]return isset[/COLOR]([COLOR="red"]$_SESSION['authorized'][/COLOR]);
}

[COLOR="blue"]if[/COLOR]([COLOR="blue"]isset[/COLOR]([COLOR="red"]$_POST['submit'])[/COLOR]){
	[COLOR="blue"]if[/COLOR]([COLOR="red"]$_POST['username']==ADMIN_USER [/COLOR][COLOR="blue"]and [/COLOR][COLOR="red"]$_POST['password']==ADMIN_PASS[/COLOR]){
	[COLOR="red"]$_SESSION['authorized']=TRUE;[/COLOR]	
	}
}

[COLOR="blue"]if(isset[/COLOR]([COLOR="red"]$_REQUEST['logout'][/COLOR])){
 [COLOR="blue"]unset[/COLOR]([COLOR="red"]$_SESSION['authorized'][/COLOR]);
}


[COLOR="blue"]?>[/COLOR]
 
puoi utilizzare anche un formato come questo:
PHP:
session_start();
ini_set('session.gc_maxlifetime', '600');
 
ragazzi poiché non riesco a far funzionare nessuno dei due modi - non si può fare una cosa del genere?

- prelevo il timer() in cui l'utente è entrato
- applico la funzione timer();
- faccio la differenza e vedo i secondi di connessione
- a tot. secondi faccio l'unset della sessione

il fatto è che ci ho provato ma quando vado ad inserire il tempo in una sessione con la funzione timer() appena aggiorno la pagina anche questa si rinnova e quindi la differenza è sempre nulla... mi potete postare qualche codice che faccia qualcosa del genere?
 
ragazzi ma (anche se lato client) non si potrebbe usare la funzione setTimeout di javascript per attivare l'unset della sessione?
 
Non è una soluzione accettabile, aggirabile anche dal più incapace, e nessuno sano di mente la userebbe. L'unico sistema che conosco, un po' complesso, è questo: al login salvi in una tabella sul database l'ID dell'utente, l'ID della sessione e la scadenza della sessione (in formato UNIX time), inoltre crei un cookie, con scadenza pari a quella nel database, che contiene l'ID di sessione. Poi, ad ogni apertura di qualsiasi pagina, cancelli le sessioni scadute dal database, e se anche quella dell'utente attuale non è più nel database cancelli il cookie (se c'è) e la sessione, altrimenti recuperi i dati dal database e crei una nuova sessione con l'ID dell'utente. In questo modo, inoltre, la sessione sopravvive alla chiusura del browser, perché viene ricreata ogni volta.
 
scusami ma che intendi per scadenza di sessione in formato unix time? il formato unix time non è quello dal 1 gennaio 1970?
 
:) ci sono arrivato dopo - quindi mi converebbe creare una funzione per l'inizio di ogni pagina che inserisca o elimini i dati dalla tabella, gestendo così le sessioni.
Ci proverò e grazie mille del consiglio
 
per Eliox:

ho provato ad inserire ini_set('session.gc_maxlefttime','2'); sia prima che dopo l'inizio della sessione, ma perdona la mia ignoranza:

il codice riportato qui sotto non dovrebbe farmi automaticamente l'unset di tutte le sessioni dopo 2 secondi?



PHP:
if(!isset($_SESSION)){
session_start();
ini_set('session.gc_maxlefttime','2');
}
 
due è un numero a caso, puoi modificarlo col valore che vuoi (compatibilmente con le impostazioni del Web server)
 
il problema è che se inserisco questo codice (ho messo due per prova) e vado ad aggiornare la pagin passati i due secondi - le sessioni rimangono settate.

(ti ricordo che uso easy-php in locale)
 
ciao, si infatti avevo sbagliato a scrivere qui :hammer: cmq dove è che sbaglio?

PHP:
<?php

if(!isset($_SESSION)){
	session_start();
	ini_set('session.gc_maxlifetime','10');
}


?>

<html>
<head>
</head>
<body>
<?php

$_SESSION['auto']='prova';

//qui $_SESSION['auto'] dovrebbe smettere di essere settato dopo 10 secondi?
//se aggiorno la pagina dopo 10 secondi me lo fa apparire !!! :incazz:
echo $_SESSION['auto'];
?>
</body>
</html>
 
Ovvio che te lo fa apparire: ad ogni caricamento della pagina lo risetti... non è così che funziona. La sessione chiaramente non viene settata ad ogni refresh della pagina, ma solo in determinate circostanze (login o altro), altrimenti così, anche quando la sessione scade, verrà ricreata ogni volta.
 
allora con questo codice dovrebbe funzionare

PHP:
<?php 

if(!isset($_SESSION)){ 
    session_start(); 
    ini_set('session.gc_maxlifetime','10'); 
} 


?> 

<html> 
<head> 
</head> 
<body> 
<form action='<?php echo $_SERVER['PHP_SELF']; ?>' method='post'>
<input type='text' name='user' /><br />
<input type='submit' name='login' /><br />

</form>
<?php 

if(isset($_POST['login'])){

if($_POST['user']=='emanuele'){
$_SESSION['auto']='prova'; 
}
}

//qui $_SESSION['auto'] dovrebbe smettere di essere settato dopo 10 secondi? 
//se aggiorno la pagina dopo 10 secondi me lo fa apparire !!
if(isset($_SESSION['auto'])){
echo $_SESSION['auto']; 
}
?> 
</body> 
</html>

dove sbaglio?
 

Discussioni simili