Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Php e variabili di sessione
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
nefffa
Mortale pio
Mortale pio


Registrato: 31/05/06 19:39
Messaggi: 26

MessaggioInviato: 15 Lug 2008 20:21    Oggetto: Php e variabili di sessione Rispondi citando

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
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 15 Lug 2008 23:01    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
nefffa
Mortale pio
Mortale pio


Registrato: 31/05/06 19:39
Messaggi: 26

MessaggioInviato: 16 Lug 2008 19:17    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 19 Lug 2008 01:53    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
nefffa
Mortale pio
Mortale pio


Registrato: 31/05/06 19:39
Messaggi: 26

MessaggioInviato: 19 Lug 2008 09:11    Oggetto: Rispondi citando

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>&nbsp;</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
Profilo Invia messaggio privato
nefffa
Mortale pio
Mortale pio


Registrato: 31/05/06 19:39
Messaggi: 26

MessaggioInviato: 19 Lug 2008 12:47    Oggetto: Rispondi citando

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. Sad

·...misteri della programmazione
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 19 Lug 2008 16:58    Oggetto: Rispondi citando

adesso non riesco a fare delle prove, magari più tardi o domani smanetto un po', troppa stanchezza...
Top
Profilo Invia messaggio privato
nefffa
Mortale pio
Mortale pio


Registrato: 31/05/06 19:39
Messaggi: 26

MessaggioInviato: 20 Lug 2008 09:10    Oggetto: Rispondi citando

..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">&nbsp;</td></tr>         
   </table>
   <!-- FINE CORPO DELLA PAGINA -->
   </td>
   </tr>
</table>
<br><br>
</body>
</html>
Top
Profilo Invia messaggio privato
nefffa
Mortale pio
Mortale pio


Registrato: 31/05/06 19:39
Messaggi: 26

MessaggioInviato: 24 Lug 2008 20:50    Oggetto: Rispondi citando

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 Smile
Ciao

ps. Che caxxata di baco!!!
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 25 Lug 2008 07:43    Oggetto: Rispondi

Un bachetto maledetto!
Non sono riuscito ad aiutarti perchè sono un po' di sere che vado a dormire alle 9... sto diventando vecchio Crying or Very sad
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi