PROBLEMI CON SESSIONI E BROWSER

Salve, ho un problema con un sito che sto realizzando nel quale l'amministratore deve fare login per modificare delle impostazioni di tale sito. Sto cercando di gestire il login mediante le sessioni e tutto sembra funzionare, tranne per un grosso problema: quando si effettua il logout della pagina di amministrazione, quando clicco sul pulsante indietro del browser, quest'ultimo torna nella pagina di amministrazione come niente fosse...(mi da un avvertimento di informazioni postdata, ma se clicco su ok vi accede lo stesso)

Cosa devo fare per risolvere questo problema ? grazie in anticipo per la risposta.

inviato 10 anni fa
narem
X 0 X

Come ti ho già risposto nei commenti all'articolo sulle sessioni, i problemi possono essere 2: o nella pagina di amministrazione non funziona il controllo sulle credenziali dell'utente (e così entrano anche gli "ospiti") oppure è il sistema di log-out a non funzionare correttamente.

Per "investigare" sui dati di sessione che raggiungono una pagina ti consiglio di usare una semplice

echo '<pre>'; print_r($_SESSION); echo '</pre>';

da inserire, dopo il session_start(), nelle pagine sospette.

Se non riesci ad individuare il problema allora riporta il codice della pagina di amministrazione che effettua il controllo sull'accesso ed anche il codice del log-out

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

grazie, controllo subito...  :)

risposto 10 anni fa
narem
X 0 X

nulla da fare, il problema persiste... ecco il codice.

<?php
session_start();
echo '<pre>'; print_r($_SESSION); echo '</pre>';
?>



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>MotoClub EtnaCross - ADMIN</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

  <link rel="stylesheet"  
     type="text/css"  href="stile.css"/>

</head>

<body>

<div id="container">
<div id="testa">
    <div id="image"><img src="img/animoto.gif" width="123" height="122"></div>
   <div id="logo"><img src="img/logo.gif" width="580" height="125"></div>
</div>
  <div id="menu">  
  <ul id="minitabs">
    <li><a href="logout.php">&nbsp; </a></li>
</ul>
</div>
  <div id="cen"> 
     
     <?php
     
      $_ARRAY['usr'] = $_POST['usr'];
      $_ARRAY['pwd'] = $_POST['pwd'];
      $_ARRAYFILE=file("nomi.txt");
      $nomepwd=explode("#",$_ARRAYFILE[0]);
      if(!($_ARRAY['usr']==$nomepwd[0]&&$_ARRAY['pwd']==$nomepwd[1]))
      {
           echo "ACCESSO NEGATO !!!<br><br>";
         echo "<form action='home.php'> <input type=submit value='Torna alla Home'></form>";
         exit();
        }
      
     else
      {
         $_SESSION['user']=$_ARRAY['usr'];
         $_SESSION['pass']=$_ARRAY['pwd'];
         echo "Salve $nomepwd[0]";
      }
      
?>
     
  </div>
      <div id="admin"><br><br>
     <?php
     if(($nomepwd[0]==$_ARRAY['usr']&&$nomepwd[1]==$_ARRAY['pwd']))
     echo "<a href='logout.php'()'>Logout</a>";
     ?>
     
     </div>

  <div id="footer">
    Copyright &copy; 2005-2006 By PoleTeam
    </div>
</body>
</html>

ed ecco il codice del logout

<?php
session_start();
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

// cancello tutti i dati di sessione
$_SESSION = array();

// Cancelliamo l'eventuale cookie di sessione
if (isset($_COOKIE[session_name()]))
{
    setcookie(session_name(), '', time()-42000, '/');
}

// distruggiamo la sessione
session_destroy();
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>MotoClub EtnaCross - FOTO</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

  <link rel="stylesheet"  
     type="text/css"  href="stile.css"/>

</head>

<body>

<div id="container">
<div id="testa">
    <div id="image"><img src="img/animoto.gif" width="123" height="122"></div>
   <div id="logo"><img src="img/logo.gif" width="580" height="125"></div>
</div>
  <div id="menu">  
  <ul id="minitabs">
    <li><a href="home.php">&nbsp;home&nbsp;</a></li>
    <li><a href="eventi.php">&nbsp;eventi&nbsp;</a></li>

    <li><a href="foto.php">&nbsp;foto&nbsp;</a></li>
    <li><a href="video.php">&nbsp;video&nbsp;</a></li>
    <li><a href="contatti.php">&nbsp;contatti&nbsp;</a></li>
</ul>
</div>
  <div id="cen"> 
    <p>LOGOUT EFFETTUATO CORRETTAMENTE</p>
  </div>
      <div id="admin"><br><br>
  
  <div id="footer">
    Copyright &copy; 2005-2006 By PoleTeam
    </div>
</body>
</html>

grazie ancora per l'aiuto...

risposto 10 anni fa
narem
modificato 10 anni fa
X 0 X

Osservando gli script che hai riportato si vede che in realtà non usi le sessioni per ricordarti se un utente è loggato oppure no.

Infatti nel primo script effettui un controllo sui valori $_POST['usr'] e $_POST['pwd'], che in teoria dovrebbero provenire da un form riempito dall'utente. Questi valori li confronti con dei valori presenti nel file nomi.txt

Questa procedura viene ripetuta ad ogni accesso alla pagina, pertanto le sessioni nel controllo delle credenziali dell'utente non vengono mai interpellate. E' vero che memorizzi nome utente e password nelle sessioni, ma poi non li usi.

Lo script per il log-out è corretto (anche se non servono le istruzioni header) ma siccome il tuo sistema di autenticazione non sfrutta affatto le sessioni, il log-out non ha effetto!

Inoltre spingendo il bottone "indietro" del browser, è come se reinvii le informazioni di autenticazione (ecco il perché di quell'avviso del browser a proposito dei dati POST) e quindi è come se ti riautentichi.

Le cose che devi fare sono:

1) fare in modo che lo script che verifica nome utente e password, indipendentemente dall'esito del login, reindirizzi subito l'utente ad una ulteriore pagina con un

header('location: nuova_pagina.php');

questo ti eviterà il problema della riautenticazione automatica se si preme "indietro"

2) se il login va bene devi memorizzare in sessione anche solo il nome utente, se va male il nome utente rimane una stringa vuota $_SESSION['nome_utente'] = '';

3) in tutte le pagine private devi mettere un controllo sui dati di sessione, verificando ad esempio che il nome utente non sia una stringa vuota

if($_SESSION['nome_utente'] != '')

Non serve memorizzare la password dell'utente.

Nota che la pagina che effettua il login (sia quella che crea il form da visualizzare, sia quella che controlla i dati immessi) non sono pagine private, pertanto nessun controllo sui dati di sessione va fatto.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
modificato 10 anni fa
X 0 X

Grazie per la risposta. Adesso cercherò di trovare una soluzione...

Nel frattempo se ciò non ti pesa molto, mi potresti indicare un esempio funzionante o comprensibile, fatto da te o in qualche sito, col quale magari potrei capire molto più rapidamente ?

Grazie di tutto cmq.

risposto 10 anni fa
narem
X 0 X

Grazie mille!!!! sono riuscito a far funzionare il tutto finalmente.  :) E  tutto grazie a quell'header che mi hai consigliato... grandioso.

risposto 10 anni fa
narem
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda