Newsgroup: it.comp.www.php
Titolo: Log out tramite link

Ciao a tutti,
Sto cercando di imparare un po' di php, e mi sto cimentando con una 
(semplicissima) applicazione che gestisce un login.
Non vi posto nemmeno il codice, perché è veramente stupida, ma 
stranamente funziona.
L'unica cosa importante è che gestisco il fatto che un utente sia 
loggato attraverso una variabile di sessione, $_SESSION['logged'], che è 
impostata a true se l'utente è autenticato e a false o non esistente se 
l'utente non è autenticato.
Quello che adesso vorrei fare è gestire il logout dell'utente, ma vorrei 
farlo attraverso un oggetto "link"; ossia, a livello di codice quello 
che mi serve è fare un unset($_SESSION['logged']), direi, ma questo 
codice deve essere scatenato dal click di un link "Log out".
Come si fa???
Non voglio usare Ajax o javascript di alcun tipo, per questioni 
didattiche prima voglio capire cosa posso fare col php puro. Quello che 
vorrei ottenere è un link alla pagina su cui sono, che però allo stesso 
tempo elimini anche la variabile di sessione. Sono stato 
sufficientemente confuso?
Grazie a chi mi può aiutare. :)
Ciao
M.

 sufficientemente confuso?
Non ho capito bene cosa vuoi fare. Hai una pagina pag1.php e vuoi, 
tramite un click su un link, distruggere $_SESSION['logged'] rimanendo 
sempre su pag1.php?
In questo caso basta che il link sia del tipo:
<a href="pag1.php?logout=1">Logout</a>
e in pag1.php inserisci:
if($_GET["logged"] == 1){
   unset($_SESSION['logged']))
}
Ovviamente puoi fare la stessa cosa in un file separato e richiamarlo in 
ogni pagina con un semplice include e generare il link per il logout con 
$_SERVER['PHP_SELF']

 }
Quello che vorrei fare è questo... però senza passare parametri visibili 
nell'url. E' possibile?
La soluzione migliore che mi è venuta in mente è una cosa del tipo:
<a href="logout.php">Logout</a>
e poi nella pagina logout php:
<$php unset($_SESSION['logged']);
       header("Location: 
http://".$HTTP_SERVER_VARS['HTTP_HOST']."/".dirname($HTTP_SERVER_VARS['PHP_SELF']."/index.php");
?>
M.

 ?>
Si`, e` il metodo normale che si usa. Puoi anche vedere se c'e` un 
HTTP_REFERER e tornare a quella pagina dopo il logout, volendo.
Un consiglio: non usare $HTTP_SERVER_VARS, ma piuttosto $_SERVER

Un consiglio: non usare $HTTP_SERVER_VARS, ma piuttosto $_SERVER
Perfetto, grazie. Ho usato la HTTP_SERVER_VARS perché così l'ho
trovata su uno script.. proverò anche con _SERVER... grazie mille!
MB

Ciao, 
il link alla pagina stessa può contenere delle variabili che prelevi con 
il GET, esempio pagina.php?logout=yes
ed in pagina.php scrivi il seguente codice:
if( $_GET["logout"] <> "" && $_GET["logout"] == "yes" ){
  unset($_SESSION['logged']);
}
è quello che ti serve ?


Modificherei la versione di Tony nel quale non mi piace tanto quel "
$_GET["logout"] <> "" ", poichè se logout non è settato darà un
warning :)
if( isset($_GET['logout']) && $_GET["logout"] == "yes" ){
  unset($_SESSION['logged']);
  header("Location: index.php");
}
Ciao

 
Due note:
1 - Url assoluta per la location (specifiche RFC)
2 - Exit/die dopo l'istruzione header
	Francesco

         Francesco
$loc = $_SERVER['HTTP_REFERER'];
if( isset($_GET['logout']) && $_GET["logout"] == "yes" )
{
	unset($_SESSION['logged']);
	header("Location: $loc");
	exit;
}
Bye.