PHP: sessioni ... Non riesco a distruggere la sessione

di solito è session_destroy() ma non mi funziona

metto i 4 files

1) login.php

<?php
session_start();

if (isset($_REQUEST["username"]) && (isset($_REQUEST["password"])))   {
      $username=$_REQUEST["username"];
      $password=$_REQUEST["password"];
 
      if (($username=="nomeutente")&&($password=="latuapassword"))      {
         $_SESSION["username"]=$username;
         $_SESSION["password"]=$password;
         $_SESSION["autorized"]=1;
         Header("Location:admin.php");
         exit;
      }else{
 
         $_SESSION["autorized"]=0; //errore e quindi autorizzazione negata
         echo '<script type="text/javascript"><!--mce:0--></script>';
      }
   }
   ?>
<form action="#" method="post">
<input type="text" name="username">
<input type="text" name="password">
<input type="submit" name="pulsante" value="invia">
</form>

2) admin.php

<?php
 session_start();
echo "Benvenuto ".$_SESSION["username"];
 if($_SESSION["autorized"]==0) {
 Header( "Location:login.php" );
 }
?>

3) logout.php

<?php

if($_REQUEST['logout']==1){
 $_SESSION=array(); // Desetta tutte le variabili di sessione.
 session_destroy(); //DISTRUGGE la sessione.
 header("Location: login.php"); //si ricarica la pagina di login
 exit; //si termina lo script in modo da ritornare alla schermata di login
}

?>

4) elimina-sessione.php

<?php
if(isset($_POST['pulsante'])){
$_SESSION=array(); // Desetta tutte le variabili di sessione.
 session_destroy(); //DISTRUGGE la sessione.
}

?>

<form action="#" method="post">
<input type="submit" name="pulsante" value="distruggi sessione">
</form>

l'ultimo l'ho creato io ed ho copiato dal logout per eliminare la sessione

ma il mio nome spunta sempre (benvenuto max)

se chiudo il browser allora si... cliccando su admin mi riporta al login

Come faccio a distruggere questa sezione?

inviato 5 anni fa
max_400
X 0 X

Se non ci metti session_start() all'inizio dei file non saprà mai quale sessione cancellare.

risposto 5 anni fa
Marco Grazia
X 0 X

nella pagina login.php ho cancellato session_start();

però non funzionava ancora... poi ho messo il form quello col pulsante (elimina-sessione.php)

dentro la pagina admin.php e ora funziona ... ho distrutto la sessione!! Ora me ne compro una nuova!

Però mi rimane una curiosità... da un altra pagina non si può cancellare la sessione?

Il pulsante legato allo script per la cancellazione  (session_destroy)...

 dev'essere per forza nella stessa pagina?

risposto 5 anni fa
max_400
X 0 X
nella pagina login.php ho cancellato session_start();

Ma perché? E' quello il punto di ingresso per le sessioni se la togli non puoi più gestire le sessioni.

però non funzionava ancora... poi ho messo il form quello col pulsante (elimina-sessione.php)

dentro la pagina admin.php e ora funziona ... ho distrutto la sessione!! Ora me ne compro una nuova!

Però mi rimane una curiosità... da un altra pagina non si può cancellare la sessione?

Il pulsante legato allo script per la cancellazione  (session_destroy)...

 dev'essere per forza nella stessa pagina?

Allora la sessione viene creata e gestita da session_start() in pratica la crea se non esiste e la mantiene aperta se già esiste.

Solo se richiami in ogni pagina session_start() puoi distruggere la giusta sessione, ma tieni presente che questo dipende anche dal browser, la via corretta per distruggerla è:

session_start();
session_unset();
session_destroy();

Cioè resettare e distruggere.

risposto 5 anni fa
Marco Grazia
X 0 X

Citazione da: max_400 - Ieri alle 22:05:39

    nella pagina login.php ho cancellato session_start();

----------------------------------------------------------------------------

Ma perché? E' quello il punto di ingresso per le sessioni se la togli non puoi più gestire le sessioni.

.

si infatti non funzionava più l'ho rimesso.

Ho trovato una guida sto studiando quella per ora.

Ci sono sessioni a tempo? Come ad esempio la posta dopo un po si ritorna al login

risposto 5 anni fa
max_400
X 0 X

Le sessioni sono a tempo, durano 1440 secondi cioè 24 minuti :) questo in modo predefinito, ovviamente si può modificare ma è un po' incasinata la faccenda.

Il metodo usato da tutti è quello di inserire in sessione il timestamp, cioè il momento in cui la sessione è stata creata e confrontarlo ogni volta, se minore di un certo lasso di tempo vai avanti, se no distruggi la sessione.

Per esempio:

$_SESSION['tempo_max'] = $_SERVER['REQUEST_TIME']; // momento in cui viene richiamato lo script espresso in secondi (PHP 5.1 o superiore)
// Mettiamo che vuoi un'azione dopo 10 minuti (cioè 600 secondi)
if (time() > ($_SESSION['tempo_max'] + 600)) {
  // Passati 10 minuti, distruggi la sessione.
  session_unset();
  session_destroy();
}
risposto 5 anni fa
Marco Grazia
X 0 X

ah .. molto bene!

appena possibile provo lo script.

Anche un giorno intero?

Però se si chiude l browser la sessione non c'è più

Non c'è modo per rederla permanente ache chiudendo il browser?

forse nei cookie?.. bò .. su questo ci devo ancora studiare

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

Domande simili