Salve a tutti.
Sul mio sito ho creato uno script per il login solo che noto dei problemi con la disconnessione dell'utente.
Con alcuni broswer funziona(chrome, internet explorer), mentre con altri (opera, firefox) no. Con le versioni mobile per smartphone android e safari funziona perfettamente.
Vi spego in cosa consiste.
Dalla home l'utente clicca su il link accedi e viene indirizzato alla pagina accedi.php.
Qui c'è un form con username, password e bottone per conferma. Al click del bottone, se il campo username non è vuoto parte una richiesta ajax che controlla se password e username sono presenti nel database, in caso affermativo elimina tutte le sessioni esistenti nella relativa tabella, crea un id univico e lo inerisce nella tabella poi lo invia per POST alla stessa pagina. Ora con l'invio per POST della chiave appena inviata, prima del tag <head> uno script php controlla se effettivamente è presente l'id nella tabella sessioni e in caso affermativo aggiunge un cookie con l'id e si viene reindirizzati con header('location ') alla home page dove ci si presenta loggati.
Ora con chrome se si clicca sul pulsante di disconnessione tutto funziona, veniamo reindirizzati alla pagina logout.php, la quale, ovviamente prima del tag <head> , controlla la presenza del cookie, ne acquisisce il valore, lo cerca nella tabella sessioni cancella le righe con quel id univoco. Infine veniamo inderizzati nuovamente alla home page e siamo disconnessi.
Il problema che si verifica con opera e altri è che cliccando su il pulsante di disconnessione sembra che siamo automaticamente reindirizzati alla home page senza che si esegue lo script php che cancella la sessione.
Prima di usare un semplice redirect usavo, il redirect 301 MOVE PERMANENT, ma credo di essermi sbagliato sul suo utilizzo.
Vi posto il codice relativo alla pagina logout.php
Codice:
<html>
	<?php
		error_reporting(E_ALL);
		include_once "/membri/letsgetout/script/php/login.php";
		$login = new login();
		$login->logout();
		header("Location: index.php");
	?>
Codice PHP:
public function logout(){
$this->connetti();
$id = $_COOKIE['lgo_session_id'];
$res = $this->action("DELETE FROM sessioni WHERE uid='$id'");
$this->disconnetti();
}
Aggiungo che credo sia redirect il problema, pur non sapendo benissimo la funzione del 301, perchè se nella pagina logout.php cancello proprio la riga header('location: ') vengo lo stesso inderizzato.