sessioni

giuppy

Nuovo Utente
2 Ago 2007
8
0
0
Ragazzi, scusate ma ho un problema e spero che qualcuno di voi mi possa aiutare.
Ho creato un sito che uyilizza le sessioni. Come variabile di sessione mi serve solo l'id della persona che si "logga". Il procedimento che ho usato lo descrivo in pochissime parole.
C'è una pagina di login che manda il contenuto del form (login e psw) ad una pagina che autentica il visitatore. Se esiste allora il suo id diventa di sessione.
Avendo cura di mettere il session_start() in ogni pagina e come prima istruzione, il problema è:
quando si logga una persona funziona tutto nella home page, ma nel momento in cui cliccano su un link del menu, si perdono i dati di sessione.
Premetto che lo stesso metodo l'ho usato molte volte senza mai avere problemi. L'unica differenza è che ora sto facendo il lavoro su un altro pc. Mi hanno detto che potrebbe essere un prob. di cokie. Sono andato nelle option del browser e sembrano che siano attive...non so più cosa fare...qualcuno ha consigli?
 
sto utilizzando internet explorer 6 su windows 2000.
Ti ribadisco per cercare di essere piu chiaro che se faccio login, entra nel sito...poi però cliccando su un qualsiasi link del menu succede che è come se scordasse la var di sessione. Me ne accorgo perchè nell'index iniziale c'è il form di login e un determinato menu (utenti), se ti logghi scompare semplicemente il form di login e cambia il menu (diventando con piu voci)...
 
mi posti il codice con cui effettuai il controllo delle sessioni nelle pagine successive al login; anzi, visto che ci sei postami anche i codice che usi per creare la sessione.
 
session

ciao eliox...sei molto gentile...allora ti posto il codice cosi mi dici un tuo parere...

una semplicissima pagina di login acquisisce i dati e li manda a questa pagina di autenticazione:
<?session_start();
include("connessione.php");
$u=$_REQUEST['username'];
$p=$_REQUEST['password'];

$queryt = "SELECT * FROM utenti WHERE (user='".$u."') AND (psw='".$p."')";
$resultt = mysql_query($queryt); // or die("[Mysql error]: can't select article required. - ".mysql_error());
$num_resultt=mysql_num_rows($resultt);//conta le righe trovate con quei dati
if($num_resultt==1)
{
if ($riga=mysql_fetch_object($resultt))
$user=$riga;
session_cache_limiter('private_no_expire');
$cache_limiter = session_cache_limiter();
$_SESSION['user'] = $user;
@header("Location: index.php?data=ok");
}
else
{
@header("Location: index.php?data=no");
}
?>

A questo punto user diveterà ( a parer mio una variabile locale)
Sia se il login è positivo, che se è negaytivo mi manda nella index. Nella index è incluso un file chiamato che mi farà comparire il menu. Tuttavia esistono 2 menu, menu1.php e menu2.php. Comparirà l'uno o l'altro in base all'esito del login. La pagina che decide quale menu compare è questa:
<table width="100%" height="53" border="0" align="center">
<tr>
<td height="22" valign="top">
<? echo("utente:". $user->user);
if($user->id!="")
{

include("menu.php");
?>
</td>
<tr>
<td height="22" valign="top" align="center"><a href="destroy.php">Esci</a></td>
</tr>
<tr><td align=center>&nbsp;</td></tr>
<tr><td align=center>&nbsp;</td></tr>
</table>
<?
}
else
{
include("menu2.php");
?>
</td>
</tr>
<tr>
<td height="24" valign="top"> <?include("login.php");?></td>
</tr>
</table>
<?
}
?>


fammi sapere se sono stato chiaro...
 
Salve,
non ho ben capito come siano dislocate le tue pagine e le varie sequenze ... me i problemi possono essere i seguenti.

1) session_start(); deve essere inserito in index.php oltre che nella pagina di login.

2) ho qualche dubbio su questa affermazione:
A questo punto user diveterà ( a parer mio una variabile locale)

echo("utente:". $user->user); .... si solo se $user = $_SESSION['user'];


In ogni caso per me è probabile che ti sia dimenticato session_start(); in index.php

Buona giornata
Andrea
 
Ciao, ti ringrazio per l'intervento.
La struttura del sito è cosi:
c'è un index in cui nella parte sinistra c'è un menu e al centro c'è un corpo sito (struttura tabellare)
nella parte sinistra possono comparire 2 tipi di menu. Nel primo ci sono solo pochi link visibili dagli utenti e in basso c'è il form di login. Quando un utente clicca sul tasto login, i suoi dati inseriti vengono spediti alla pag autentica che con l'istruzione $_SESSION['user'] = $user; mi fa diventare la variabile $user, una var di sessione. Se il login è andato a buon fine nella pagina index semplicemente cambierà il menu e comparira il menu piu lungo e scompare in cuesto menu il form di login (ovviamente essendo gia loggato).
In tutti gli altri siti che ho fatto ha sempre funzionato tutto, qui invece succede che va tutto bene fino alla comparizione della index iniziale (qualla con il menu completo), ma nel momento in cui si clicca su uno dei link di questo menu compare la pagina chiamata ma con il menu quello in cui compare il login (morale della favola ha perso i dati di sessione perchè la struttura della parte sinistra del sito è far comparire il menu1 se la var di sesione è vuota e il menu2 se la var di sessione esiste).
Naturalmente ho avuto ben cura di inserirer e ricontrollare la riga session_start(); all'inizio di ogni pagina e avendo cura di non lasciare spazi bianchi prima di essa...
naturalmente vi ringrazio dell'aiuto
 
no aspetta, $user non ti diventa una variabile di sessione, questa è e rimane $_SESSION['user'].
Se vuoi riutilizzare $user devi riconfermare l'uguaglianza:
$user= $_SESSION['user'] in ogni pagina in cui è necessaria la sessione
 
No sono di Cagliari :)
"Intivato" mi ha ricordato un'amica di Treviso :)
 
dunque ragazzi...ho fatto un file che ho incluso in ogni pagina contenete queste righe
<?session_start();
$user= $_SESSION['user'];
$_SESSION['user'] = $user;
?>
cosi posso rimpallare la variabile di sessioone in ogni pag.
Tuttavia purtroppo ho sempre lo stesso problema...
p.s. è possibile scambiarsi il contatto msn?(non so se le regole lo permettono...)
 
Crea un nuovo file "testsessioni.php"
e scrivici dentro,

<?
session_start();
if(is_null($_SESSION['count'])){ $_SESSION['count'] = 0; }
$_SESSION['count'] = $_SESSION['count'] + 1;
print "Count " . $_SESSION['count'];
?>

prova a riaggiornare la pagina, ad ogni aggiornamento la variabile $_SESSION['count'] si incrementa. e l'output sarà simile a

Count 1
Count 2
Count 3 etc...

Se il numero aumenta, vuol dire che hai cannato qualcosa nei tuoi script, se non incrementa vuol dire che il tuo PHP ha qualche problema nella configuazioni delle sessioni.

Un saluto.
Andrea
 
perfetto andrea, il tuo metodo di test è stato utile...la pagina si aggiorna e conta...

faccio una cosa...ti posto il codice e se hai un minuto lo guardi...:

PAGINA INEDX.PHP
<?include("session.php");
print_r($_SESSION);ECHO("<BR>");
print_r($_COOKIE);
?>
<html>
<head>
<title></title>
<link rel="stylesheet" href="style.css" type="text/css" >
</head>
<body
<table border="0" bgcolor="#ffffff" class="blu" align="center" cellspacing="0" width="70%" height="200" >
<?include("top.php");?>
<tr>
<td width="18%" height="200" align="left" valign="top">
<BR>
<?include("left.php");?>
</td>
<td width="80%" valign="top">
<table width="100%" valign="top" border="0" align="center" cellpadding="10" cellspacing="5">
<tr>
<td width="100%">
<!-- qui c'è codice che per questo controllo non interessa-->
</td>
</tr>
</table>
</body>
</html>


Come vedi c'è la pagina left inclusa, e sarà:
PAGINA LEFT.PHP
<table width="100%" height="53" border="0" align="center">
<tr>
<td height="22" valign="top">
<? echo("utente:". $user->user);
if($user->id!="")
{
include("menu.php");
?>
</td>
<tr>
<td height="22" valign="top" align="center"><a href="destroy.php">Esci</a></td>
</tr>
<tr><td align=center>&nbsp;</td></tr>
<tr><td align=center>&nbsp;</td></tr>
</table>
<?
}
else
{
include("menu2.php");
?>
</td>
</tr>
<tr>
<td height="24" valign="top"> <?include("login.php");?></td>
</tr>
</table>
<?
}
?>

quindi se user esiste mi carica il menu.php oppure menu2.php.

Inoltre vengono utilizzate le pagine session.php
<?session_start();
$user= $_SESSION['user'];
$_SESSION['user'] = $user;
?>

e autentica.php che viene usata per utenticare l'utente e che è fatta così
<?session_start();
include("connessione.php");
$u=$_REQUEST['username'];
$p=$_REQUEST['password'];

$queryt = "SELECT * FROM utenti WHERE (user='".$u."') AND (psw='".$p."')";
$resultt = mysql_query($queryt); // or die("[Mysql error]: can't select article required. - ".mysql_error());
$num_resultt=mysql_num_rows($resultt);//conta le righe trovate con quei dati
if($num_resultt==1)
{
if ($riga=mysql_fetch_object($resultt))
$user=$riga;
session_cache_limiter('private_no_expire');
$cache_limiter = session_cache_limiter();
$_SESSION['user'] = $user;
@header("Location: index.php?data=ok");
}
else
{
@header("Location: index.php?data=no");
}
?>

Se hai la possibilità du vedere dove può essere nascosto l'errore ok, altrimenti ti ringrazio lo stesso...
 
Ho appena ricostruito l'esempio sul mio server ... come da te descritto ... nessun problema!

Non avendo il resto del codice ... fin qui posso aiutarti ...

prova a modificare session.php in questo modo:
<?
session_start();
header ('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
$user= $_SESSION['user'];
?>

Attenzione che da qualche parte nel tuo scritp non ci sia il comando per la cancellazione della sessione ... o che magari non resetti $_SESSION['user']

Speriamo che tu riesca a venirne a capo.

Un Saluto
Andrea
 
sono convinto che sia un problema del computer perchè in tutti i siti che ho fatto ha sempre funzionato bene e l'ho fatto sempre allo stesso modo.
Mi hanno detto che potrebbe essere che su questo pc non ci siano le cookie attive, ma ho visto nel browser e sembra che siano attive...
non so come fare...
ora copio tutto il codice e provo il tutto sul vecchio pc...
cmq sei stato gentilissimo..
grazie
 
Se è un problema di cookie ... fai come ti ho detto:

header ('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');


... mi ha tirato fuori dai casini innumerevoli volte :)
 

Discussioni simili