Precedente :: Successivo |
Autore |
Messaggio |
nefffa Mortale pio
Registrato: 31/05/06 19:39 Messaggi: 26
|
Inviato: 15 Lug 2008 20:21 Oggetto: Php e variabili di sessione |
|
|
Ciao a tutti, ho un problemino con le variabili di sessione in php. Parto con cache vuota, senza cookie o file temporanei.
Ho creato un piccolo sito con un'area riservata. Dopo aver immesso login e pwd vado in una pagina in cui effettuo il controllo e se tutto ok valorizzo una variabile di sessione; nella pagina di ritorno la variabile di sessione è valorizzata. Clicco su un link dello stesso sito per entrare in un'altra area, ma la variabile di sessione non è più valorizzata. Ho controllato per filo e per segno il codice e non c'è nessun punto in cui "elimino" oppure modifico la variabile. E' come se non esistesse più. Allora provo a reinserire utente e pwd premo Ok e mi ri-valorizza la variabile di sessione, ma la cosa strana è che da questo punto in poi la variabile rimane valorizzata.
Riassumendo: la prima volta che la valorizzo non tiene il valore e "scompare" la volta successiva rimane valorizzata!!
Non riesco a capire il problema. Avete qualche idea?
Grazie |
|
Top |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 15 Lug 2008 23:01 Oggetto: |
|
|
Sarebbe più facile se postassi un po' di codice...
Comunque tieni conto che tutte le pagine che devono accedere alle var di sessione devono chiamare la funzione session_start() inizia una sessione o ne riprende una già aperta. |
|
Top |
|
|
nefffa Mortale pio
Registrato: 31/05/06 19:39 Messaggi: 26
|
Inviato: 16 Lug 2008 19:17 Oggetto: |
|
|
CIao, postarti del codice... che parte vuoi che posti?
quando setto la variabile faccio così
$_SESSION['utente']=1;
ed un utilizzo in lettura è questo
if (isset($_SESSION['utente']) .....
Ho controllato, inoltre che in tutte le pagine ci fosse session_start come prima istruzione.
La cosa strana come detto è che il primo giro la viariabile perda l'inizializzazione, mentre nel secondo giro (stesso percorso) la variabile rimane valorizzata. |
|
Top |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 19 Lug 2008 01:53 Oggetto: |
|
|
Prova a postare il codice della pagina che setta al login la sessione e di una pagina che controlla la sessione per vedere se far accedere la persona alla stessa oppure no.
E' molto strano il comportamento che descrivi. |
|
Top |
|
|
nefffa Mortale pio
Registrato: 31/05/06 19:39 Messaggi: 26
|
Inviato: 19 Lug 2008 09:11 Oggetto: |
|
|
Form presente in index.php:
all'inizio della pagina c'è session_start();
Codice: | <?php
if (! isset($_SESSION['utente']) || ($_SESSION['utente'] == 0)){
?>
<form name="login" action="_tpl/logindo.php" method="post">
<table align="center" border="0" width="100%" height="100%">
<tr><td> </td></tr>
<tr>
<td width="10%">Password:</td>
<td width="10%"><input type="password" name="pwd" value="">
<td><input type="submit" name="invia" value="Entra"></td>
</tr>
</table>
</form>
<?php } ?> |
-----------------------
logindo.php
Codice: | <?php
session_start();
include("_redirect.php");
include("global.php");
if (isset($_GET['esci'])){
redirect("../index.php");
}
$error=0;
if (isset($_POST['pwd'])):
$password=$_POST['pwd'];
else:
$error=1;
endif;
if ($error == 0){
$db = sqlite_open($_SESSION['Connstr']);
$query="select id from user where password='".$password."'";
$result = sqlite_query($db, $query);
$howMuch= sqlite_num_rows($result); // conto il numero di dati estratti
if ($howMuch <> 1){ /* se utente o pwd sono errati ...*/
$_SESSION['stato']= " Utente o password errati.";
$_SESSION['utente']=0;
}
else{
$row=sqlite_fetch_array($result);
$_SESSION['stato']= "Utente autenticato.";
$_SESSION['utente']=1;
$db = sqlite_open($_SESSION['Connstr']);
$query="select * from company";
$result = sqlite_query($db, $query);
$row=sqlite_fetch_array($result);
$companyId= $row['companyId'];
if ($companyId > 0){
$_SESSION['company']=$companyId;
redirect("../ig_company_s.php?id=0");
}
else{
$_SESSION['company']=0;
}
}
}
else{
$_SESSION['stato']= "Errore generico!!";
}
//echo "-".$_SESSION['stato']."-".$_SESSION['utente'];
redirect("../index.php");
?> |
----------------------
Torno poii in index.php ed ho la variabile .$_SESSION['utente']; valorizzata, ricarico la pagina con f5 e mi rimane valorizzata. Clicco su una voce di menù che mi pota in un'altra pagina dell'applicazione ed anche se in quella pagina è presente session_start(); leggendo il valore di .$_SESSION['utente']; questo non è presente.
Se torno indietro con la freccetta del browser all'index.php la variabile è ancora visualizzata!
l'unica cosa che mi sembra possa dare questo tipo di problema è che la pagina che clicco nel menù non abbia settato il session_start, ma non è coìs perchè è settato in tutte le pagine |
|
Top |
|
|
nefffa Mortale pio
Registrato: 31/05/06 19:39 Messaggi: 26
|
Inviato: 19 Lug 2008 12:47 Oggetto: |
|
|
ho provato anche a cambiare il nome della variabile, invece che $_session['utente'] l'ho chiamata $_session['utent'] ma anche così non funzia.
Inoltre ho provato anche ad usare i cookie per questa variabile ma anche qui nella pagina di settagio del cookie funziona, mentre per tutto il resto del sito non funzia.
·...misteri della programmazione |
|
Top |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 19 Lug 2008 16:58 Oggetto: |
|
|
adesso non riesco a fare delle prove, magari più tardi o domani smanetto un po', troppa stanchezza... |
|
Top |
|
|
nefffa Mortale pio
Registrato: 31/05/06 19:39 Messaggi: 26
|
Inviato: 20 Lug 2008 09:10 Oggetto: |
|
|
..una cosa che forse potrebbe essere utile: ho altre variabili di sessione nell'applicazione. Finchè sono nell'index e finchè entro nella logindo.php rimangono valorizzate. Quando passo in un'altra pagina perdono la valorizzazione. Ho pensato che forse c'è qualche cosa o nei tag html o da qualche parte che mi resetta la sessione. posto una pagina tipo in cui non vede le variabili
Codice: | <?php
session_start();
include("_tpl/_redirect.php");
//include("_tpl/global.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><?php echo $_SESSION["title"];?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" media="screen">
@import url("_tpl/stile.css");
</style>
<script language="JavaScript" src="js/js.js"></script>
</head>
<body>
<?php
$pagina="constructionsite";
$sottomenu="lista";
if (isset($_POST['constructionType'])){
$constructionType=$_POST['constructionType'];
}
elseif (isset($_GET['constructionType'])){
$constructionType=$_GET['constructionType'];
}
else{
$constructionType=0;
}
if (isset($_POST['parola'])){
$parola=$_POST['parola'];
}
elseif (isset($_GET['parola'])){
$parola=$_GET['parola'];
}
else{
$parola="";
}
?>
|
Codice: |
<?php include("_tpl/_title.php"); ?>
<table id="corpo">
<tr>
<td class="colMenu">
<?php include("_tpl/_menu.php"); ?>
</td>
<td class="tdBody" valign="top">
<!-- INIZIO CORPO DELLA PAGINA -->
<?php $db = sqlite_open($_SESSION['Connstr']); ?>
<h1>Elenco </h1><br>
<?php
$query="select * from constructionSite cs where 1=1";
if($parola <> ""){
$query=$query." and cs.Name like '%".$parola."%'";
}
$result = sqlite_query($db, $query);
$howMuch= sqlite_num_rows($result);
echo "Trovati: <strong>".$howMuch."</strong>";
?>
<table width="80%" border="0" id="stampa">
<tr>
<td><strong>Nome</strong></td>
<td><strong>Data Inizio</strong></td>
<td><strong>Data Fine</strong></td>
<td><strong>Tipologia</strong></td>
<td width="1%"><strong>Elimina</strong></td>
</tr>
<form name="form_generico" action="ig_construction_u.php" method="post">
<input type="hidden" name="page" value="<?php echo $page ?>">
<input type="hidden" name="id2del" value="">
<?php
$cnt=1;
while($row = sqlite_fetch_array($result)){ ?>
<tr <?php if ($cnt % 2 == 0) { ?> class="pari" <?php } else { ?> class="dispari"<?php } ?>>
<td><a href="ig_construction_s.php?id=<?php echo $row['constructionId']; ?>&page=<?php echo $page; ?>"><u><?php echo $row['constructionName']; ?></u></a></td>
<td><?php echo $row['startDate']; ?></td>
<td><?php echo $row['endDate']; ?></td>
<td><?php echo $row['constructionTypeName']; ?></td>
<td><input type="button" name="Elimina" value="Elimina" title="Elimina" onClick="javascript:check_generico('Cancellare?','<?php echo $row['constructionId']; ?>');"></td>
</tr>
<?php $cnt=$cnt+1;
} ?>
</form>
<tr><td colspan="4"> </td></tr>
</table>
<!-- FINE CORPO DELLA PAGINA -->
</td>
</tr>
</table>
<br><br>
</body>
</html> |
|
|
Top |
|
|
nefffa Mortale pio
Registrato: 31/05/06 19:39 Messaggi: 26
|
Inviato: 24 Lug 2008 20:50 Oggetto: |
|
|
Ho risolto, posto la soluzione e dato che potrebbe capitare a qualcun altro non vorrei che perdesse due settimane per questa cavolata!!!
Premessa: la mia applicazione deve girare solo in locale, non in internet.
Il problema si presentava solo quando cliccavo i link. Perdeva le sessioni anche se era presente la funzione session_start() in ogni pagina.
Il motivo era che entravo nell'applicazione così http://127.0.0.1/mioprogetto, mentre cliccando sul link andavo su http://localhost/mioprogetto/link.php perchè la variabile che avevo impostato sui link era valorizzata con localhost. In questo modo, anche se il tutto si svolgeva in locale cambiava il nome del server da 127.0.0.1 a localhost perdendo anche le variabili di sessione.
la soluzione è stata quella di unificare i link tutti a 127.0.0.1
Grazie a freemind che ha tentato di aiutarmi
Ciao
ps. Che caxxata di baco!!! |
|
Top |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 25 Lug 2008 07:43 Oggetto: |
|
|
Un bachetto maledetto!
Non sono riuscito ad aiutarti perchè sono un po' di sere che vado a dormire alle 9... sto diventando vecchio |
|
Top |
|
|
|