Newsgroup: it.comp.www.php
Titolo: Cancellazione di variabile di sessione

Sto cercando di fare un logout per sloggarsi dalla pagina privata di un 
sito. Per ora ho messo un semplice link che va ad una pagina logout.php 
con questo codice:
<?php
session_start();
unset ($_SESSION["user"]);
header ("Location: ../index.php");
?>
Il controllo che faccio in ogni pagina della sezione privata è questo:
<?php
session_start();
if(!isset($_SESSION["user"]))
{
	header ("Location: ../login.php");
}
?>
Pero se provo a rientrare nell'area privata, una volta che mi sono 
loggato e sloggato, non mi porta alla pagina login.php, mi fa accedere 
senza problemi come se la variabile "user" fosse ancora settata. Come 
devo fare per cancellarla??

 settata. 
http://www.php.net/manual/en/function.session-write-close.php
[promo]
http://setecastronomy.stufftoread.com/go.php?ID=8
[/promo]
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 
http://www.php.net/manual/en/function.session-write-close.php
Ho provato ad aggiungere la funzione session_write_close() ma non cambia 
niente :(
<?php
session_start();
unset ($_SESSION["user"]);
session_write_close();


 cambia  niente :(
Make sure that you call session_start() again after session_write_close() 
if you rely on the SID rewriting.  Otherwise it will not be rewritten.
Max
-- Se mi volete scrivere
massimo . ori @ aliceposta . it

 if you rely on the SID rewriting.  Otherwise it will not be rewritten.I
I tried with session_start() after the code too but nothing... I tried 
also with the session_destroy() function that I have read in some 
example but I wasn't able to get a spider from the hole :D
Bello in inglese :)))))

 ha detto:

$_SESSION=array(); e cancelli tutto
Francesco Mazzi
Webmaster di AltroPC.it - 
http://www.altropc.it
 
Project Admin di "PHP Reservation - Online booking system" - 
http://phpreservation.sourceforge.net
Dev.Staff di E-Xoopport - 
http://dev.e-xoopport.it

 $_SESSION=array(); e cancelli tutto
Ho appena provato anche cosě.... e niente... ma com'č possibile???


Incolla tutto il codice, va'
-- 
On web: 
http://antoniobonanno.debris.it/
On Etz: 
http://plasson.etz.it/

 un sito. Per ora ho messo un semplice link che va ad una pagina
Proof of concept funzionante:
<?php // a.php
session_start ();
$_SESSION['user'] = 'pippo';
session_write_close ();
header ("Location: b.php?" . SID);
?>
<?php // b.php
session_start ();
// togliere il commento per verificare che $_SESSION["user"] 
// sia correttamente valorizzato
// print_r ($_SESSION); exit;
if (isset ($_SESSION["user"])) {
	unset ($_SESSION["user"]);
}
session_write_close ();
header ("Location: c.php?" . SID);
?>
<?php // c.php
session_start ();
print_r ($_SESSION);
?>


 Incolla tutto il codice, va'
Ok... questo è login.php che è la pagina che uso per loggare l'utente:
<?php
ob_start();
session_start();
function auth()
{
  global $lang;
  $lang[auth]="<p align='center'><b>Stai cercando di accedere ad un'area 
protetta</b>
		</p><p align='center'><b>Il &quot;Nome Utente&quot; e la 
&quot;Password&quot; inseriti non corrispondono,
		controlla i dati inseriti e <a href='login.php'>riprova</a></b></p>";
  $realm="Zona protetta";
  header("WWW-Authenticate: Basic realm='".$realm."'");
  header('HTTP/1.0 401 Unauthorized');
  echo $lang[auth];
}
if( !isset($PHP_AUTH_USER) && !isset($PHP_AUTH_PW) )
{
     auth();
}
else
{
  include("dati.php"); //In dati.php ci sono i dati per collegarsi al 
database
  $link = mysql_connect ("$db_host", "$db_login", "$db_pass")
  	or die ("Non riesco a connettermi al server <b>$db_host</b><br>
  		controlla che il valore delle variabili <br>
  		in dati.php siano corretti!");
  mysql_select_db ($database, $link)
  	or die ("Non riesco a selezionare il db $database<br>");
  $PHP_AUTH_USER=strip_tags($PHP_AUTH_USER);
  $PHP_AUTH_PW=strip_tags($PHP_AUTH_PW);
  $query="SELECT * FROM admin WHERE admin.nome = '$PHP_AUTH_USER' AND 
admin.password = '" .crypt($PHP_AUTH_PW, "pippo"). "'";
  $result=mysql_query($query);
  $row=mysql_num_rows($result);
  if( $row )
  {
    $_SESSION["user"] = $PHP_AUTH_USER;
    header ("Location: ./admin/index.php"); // pagina su cui 
reindirizzare se il login ha successo
    ob_end_flush();
  }
  else
  {
    auth();
  }
}
Questo è logout.php per sloggarsi:
<?php
include("check.php");
$_SESSION=array();
session_destroy();
header ("Location: ../index.php");
?>
E questo è check.php che non è altro che il controllo all'inizio di ogni 
pagina della sezione riservata e non fa altro che controllare se la 
variabile di sessione "user" è settata:
<?php
session_start();
if(!isset($_SESSION["user"]))
{
	header ("Location: ../login.php");
}
?>
Tutto funziona a dovere la primavolta che tento di accedere alla sezione 
protetta ma se poi esco (anche richiamando la pagina logout.php) e 
rientro mi fa accedere senza dover ridigitare utente e pass.

 print_r ($_SESSION);
Se provo a stampare il contenuto di $_SESSION dopo aver fatto il logout 
mi da "Array ( )" che è giusto quindi il problema mi sa che è nel 
controllo in check.php.... :|

 controllo in check.php.... :|
Ehm... o in login.php mi sa che ho fatto qualche cazzata lì adesso controllo

Credo di aver capito.... $PHP_AUTH_USER rimane non è che viene 
cancellata quando passo ad un'altra pagina giusto?
Io credevo fosse solo una variabile che conteneva il valore del campo 
dove si inserisce userid e pass nel form di login.

 cancellata quando passo ad un'altra pagina giusto?  
http://www.php.net/manual/en/features.http-auth.php
