Newsgroup: it.comp.www.php
Titolo: Conservare il valore di una sessiona tra le pagine

Salve,
stavo costruendo un rudimentale sistema di controllo degli accessi
dell'utente. Un form nella pagina principale preleva username e password e
li invia per controllo allo script check_login. Questo script, dopo varie
elaborazioni, esegue la query di ricerca dell'utente in una tabella degli
utenti.
Se l'utente esiste, allora imposta la variabile di sessione
$_SESSION['Login'] a true, altrimenti la imposta a false. Però, il valore di
$_SESSION['Login'] viene perso se mi sposto tra le pagine.
$query="Select Username, UserPassword from $tabella where
('$password'=UserPassword) and ('$username'=Username)";
$result=mysql_query("$query") or die(mysql_error());
// Se esiste l'utente con username e password allora consenti il login
if (mysql_num_rows($result)==1)
{
$_SESSION['Login']=true;
$url="index.php";
$url=urlencode($url);
header ("Location: $url");
}
else
{
$_SESSION['Login']=false;
$url="RegistraUtente.php";
header ("Location: $url");
}
Se provo ad inserire un controllo del genere
<?
echo "Utente Registrato?";
if ($_SESSION['Login'])
echo "Utente registrato";
?>
in una pagina qualsiasi, $_SESSION['Login'] è vuota.
Come posso risolvere il problema?
Franz

 Come posso risolvere il problema?
Devi utilizzare la funzione 
http://www.php.net/session_write_close
oppure il codice presentato qui 
http://www.php.net/session#40366
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y
L'uomo, conscio di sbagliare, persevera.

Non funziona lo stesso. Ecco il programma completo che controlla se un
utente è registrato o meno:
<?php
session_start();
include("dbconnect.php");
$tabella="table";
$dbname="Zucca";
if (!isset($_SESSION['Login']))
{
$_SESSION['Login']=false;
}
if (!isset($_SESSION[$s]))
$_SESSION[$s]=1;
else
$_SESSION[$s]++;
session_write_close();
$IdUser=session_id();
$data=date('Y-m-d');
if (!ISSET($HTTP_COOKIE_VARS["PianuraOnLine"]))
setcookie("PianuraOnLine",$IdUser,time()+60*60*24*365);
else
$IdUser=$HTTP_COOKIE_VARS["PianuraOnLine"];
mysql_select_db($dbname,$db);
$username=$_POST["username"];
$password=$_POST["password"];
$query="Select Username, UserPassword from $tabella where
('$password'=UserPassword) and ('$username'=Username)";
$result=mysql_query("$query") or die(mysql_error());
// Se esiste l'utente con username e password allora consenti il login
if (mysql_num_rows($result)==1)
{
$_SESSION['Login']=true;
session_write_close();
$url="index.php";
header ("Location: $url");
}
else // Invia l'utente sulla pagina di registrazione
{
$_SESSION['Login']=false;
session_write_close();
$url="RegistraUtente.php";
header ("Location: $url");
}
?>
Lo script funziona, se però l'utente non è registrato, riesco a leggere
nella pagina RegistraUtente.php il valore di $_SESSION['Login'], se invece
l'utente è già registrato, deve essere rediretto di nuovo alla pagina
iniziale, e qui $_SESSION['Login'] è sempre vuota. Perchè?
Franz

 utente h registrato o meno:
session_write_close lo devi usare SOLAMENTE prima di fare header
location.
quoto dal manuale
session_write_close -- Write session data and end session
-- 
I am what I am, I do what I can
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Votami! 
http://www.phpclasses.org/vote.html


 quoto dal manuale
Ok, ho modificato lo script come dici tu, ma lo stesso non funziona. Il
problema è che se io imposto il valore $_SESSION['Login'] nello script
check_login.php, dopo, quando ritorno alla pagina chiamante, il valore
$_SESSION['Login'] viene perso, come se on fosse mai stata impostata.
Franz

 impostata.
Non so quali modifiche tu abbia fatto, comunque:
<!-- file login.php -->
<a href="check_login.php?user=pippo&password=pluto">Login</a>
<?php // file check_login.php
session_start();
if (!isset ($_SESSION['Login'])) {
	$_SESSION['Login'] = false;
}
if (isset ($_GET["user"]) && ($_GET["user"] == "pippo") &&
	isset ($_GET["user"]) && ($_GET["user"] == "pippo")) {
 
	$_SESSION['Login'] = true;
	session_write_close();
	header ("Location: index.php");
}
else 
{
	$_SESSION['Login'] = false;
	session_write_close();
	header ("Location: login.php");
}
?>
<?php // file check_login.php
session_start();
if (isset ($_SESSION['Login']) && ($_SESSION['Login'] == true)) {
	print ("Successfully logged");
} else {
	header ("Location: login.php");
}
?>
Funziona perfettamente.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y


 	isset ($_GET["user"]) && ($_GET["user"] == "pippo")) {
ERRATA CORRIGE:
if (isset ($_GET["user"]) && ($_GET["user"] == "pippo") &&
    isset ($_GET["password"]) && ($_GET["password"] == "pluto")) {
-- 
I am what I am, I do what I can


Scusa, ma ho capito il problema. Dovevo creare una directory dove vengono
salvate le sessioni. Io non sapevo che in Windows ciň fosse necessario. In
Linux non avevo mai avuto problemi. Non erano problemi del programma, ma
solo del fatto che le sessioni non venivano salvate.
Grazie per tutti i consigli che mi hai dato
Franz