Domanda

Ho un sito web PHP sto mantenendo e ho confermato che questo ha lavorato a un certo punto.

Abbiamo un sito web che utilizza un sistema di login, che memorizza un loggato le informazioni dell'utente in una variabile $_SESSION['user']. Il sito utilizzato per registrare l'utente quando clic su /logout.php che essenzialmente eliminato quella parte della seduta, poi header() reindirizzato alla homepage.

Come di recente, la /logout.php file con session_start() in alto in qualche modo non vede le informazioni sessione quando print_r() viene utilizzato per l'uscita è a scopo di debug.

Se vado a un'altra pagina, vedo la sessione di informazioni più che bene, ma non sulla pagina di logout ... che è esattamente il motivo per cui non riesco a rimuovere la sessione di informazioni, perché non è accessibile.

Ho pensato che fosse $_SESSION globale sul sito fino a quando il browser è stato chiuso. Non ho mai avuto questo accada e so che l'istanza della sessione è stato avviato in questa pagina, quindi è strano che non è mi mostra i dati relativi alla sessione.

Tutte le idee? Sono totalmente perplesso su questo!

Codice: /logout.php

<?
#session_start() is inside this file
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php');

unset($_SESSION['user']);
header("location: /");
exit();
?>

Il controllo di $_SESSION['user'] è a livello di sito e ho chiamata a vari elementi sottostanti quando necessario per cose diverse. Qualcun altro costruito questo sito e sto cercando di eseguire il debug perché non funziona per loro tutto ad un tratto.

È stato utile?

Soluzione

Stai accedendo logout.php dalla esattamente lo stesso di dominio che si imposta la sessione per cominciare (vale a dire example.com vs. www.example.com/logout.php)

Per quanto riguarda i dati di sessione specifica solo disinserimento, sarebbe meglio chiamare session_destroy() e poi disinserire i cookie per terminare la sessione.

Altri suggerimenti

Se il dominio / sottodominio è la stessa come il resto della pagina, direi che questo suona come un tipico errore di uscita della sessione contro. Assicurarsi di aver attivato tutti gli errori, e visualizzarle, come forse avrete già stampata output al client prima di chiamare session_start(). Questo si romperà la funzione e rendendo le sessioni disponibili.

Per risolvere il problema (se è il caso), è necessario rimuovere tutto l'output prima session_start. Anche uno spazio prima <?php sarà considerato uscita da Apache (e altri). Inoltre, assicurarsi di avere disattivato BOM (Byte Order Mark) nel documento (qualsiasi editor decente permette di cambiare questo, basta guardare per qualcosa come "Impostazioni del file corrente").

Ricordate sempre la prima riga di codice PHP dovrebbe essere session_start(); e nient'altro. Se tutti la vostra intenzione di fare è di disinserire le variabili di sessione e distruggere la sessione, provare a rimuovere il require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php'); e aggiungere il session_start () e il session_destroy () alla fine del file logout.php e vedere se funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top