session_destroy() -> Session überlebt einmal

Acriss

Gesperrt
Hi,
ich habe ein Problem mit folgendem Code:
PHP:
session_start();
$killsession = session_destroy(); // Killt die Session
if ($killsession) echo 'Sie sind jetzt ausgeloggt. <a href="index.htm">Zur Startseite</a>'; //Wenn sie erfolgreich gekillt wurde
else echo 'Logout fehlgeschlagen.'; //Andernfalls
sleep(3); //Nur eingebaut um was zu pruefen, theoretisch egal
echo $_SESSION['member']; //Pruefen ob Session wirklich tot ist

$_SESSION['member'] wird aber immer noch ausgegeben.
Erst beim aktualisieren der Site, verschwindet es dann -.-
Wie kann ich das umgehen?

unset funktionier soweit ich mich informiert habe nicht.
 
Die session_destroy()-Funktion löscht nur die mit der Sitzungs in Verbindung stehende Sitzungsdatei, in der der Wert der serialisierten $_SESSION-Variable steht, die eben bei jedem Aufruf des Skripts bei korrekter Sitzungs-ID wieder deserialisiert wird. Die $_SESSION-Variable existiert dennoch bis zum Ende der Laufzeit des Skripts.
Wenn du diese zurückgesetzt haben willst, musst du es selbst machen:
PHP:
var_dump($_SESSION);
session_destroy();   // löscht die Datei, in der die Sitzungsdaten gespeichert werden
$_SESSION = array(); // setzt die Sitzungsvariable zurück
var_dump($_SESSION);
 
Hallo Gumbo,

ich habe die 4 Zeilen zum Zerstörn der Session bei mir auch angewendet.

logout.php:
PHP:
<?php
   var_dump($_SESSION);
  session_destroy();   // loescht die Datei, in der die Sitzungsdaten gespeichert werden
  $_SESSION = array(); // setzt die Sitzungsvariable zurück
  var_dump($_SESSION); 
 $_SESSION['login'] = false;
?>
Leider tut sich da gar nicht viel, denn das:
PHP:
echo $_SESSION['login'];
auf der index.php gibt weiterhin 1 aus.

Meine index.php in der die verschiedenen switch case Abfragen zur Navigation ausprogrammiert sind sieht so aus:
PHP:
<?php
session_start();
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
     "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ein Web-Interface f&uuml;r einen Fisher-Price-Roboter</title>

<!-- externe css-Datei -->
<link rel="stylesheet" type="text/css" href="css/robo.css">
</head>
<body>
 <!-- Inhalt der Datei -->
<?php


echo $_SESSION['login'];

//  Es wird &uuml;berpr&uuml;ft ob POST oder GET Variablen gesetzt sind und wenn ja neu zugeordnet
if (isset($_POST['action']))
    {    $action = $_POST['action'];    
    }
    else
    {    if (isset($_GET['action']))
            {    $action = $_GET['action'];    }
            else
            {    $action = "start" ;        }
    }


switch ($action){ 
    case Memberbereich:         
            include('memberbereich.php'); 
            break; 
    case Einstellungen: 
            include('einstellungen.php'); 
            break; 
    case Anleitung: 
            include('anleitung.php'); 
            break; 
    case Register: 
            include('register.php'); 
            break; 
    case Logout: 
            include('logout.php'); 
            break; 
    default: 
            include('login.php'); 
}      
if ($_SESSION['login']== true){
    include('user_menu.php');
}
else{ 
    include('standart_menu.php');
}
?>

</body>
</html>
Die user_menu.php sieht so aus:
PHP:
<?php
echo '<div id="navi">';
?>
<a href="index.php?action=Memberbereich" onFocus="if(this.blur)this.blur()">Memberbereich</a><br>
<a href="index.php?action=Einstellungen" onFocus="if(this.blur)this.blur()">Einstellungen</a><br>
<a href="index.php?action=Anleitung" onFocus="if(this.blur)this.blur()">Anleitung</a><br>
<?php
echo '</div>'; 
?>
und die memberbereich.php sieht wie folgt aus:
PHP:
<?php
include('usercheck.php'); /* Pruefen ob man eingelogt ist */

echo "Bereich Member<br>";
$benutzerid = session_id();
     $_SESSION['user'] = $user;
     $_SESSION['passwd'] = $passwd;
     $_SESSION['login'] = $login;

echo '<div id="sign">';
     echo "Benutzer: <b>".$user."</b><br>";
     echo "Passwort: <b>".$passwd."</b><br>";
     echo "BenutzerID: <b>".$login."</b><br>";
     echo "SessionID: <b>".$benutzerid."</b><br>";
echo '</div>';
  
  
echo '<form action="index.php?action=logout" method="POST">';
echo '<input type="submit" name="logout" value="Logout">';
echo '</form>'; 
?>
Ich habe einen Denkfehler drin. Weiß aber nicht wo. Mein Anliegen ist folgendes: Kann mir jmd. sagen, wie ich den Logout Button betätigen kann und dann wieder vorne an der Anmeldung erscheine.

Die login.php ist so programmiert:
PHP:
<?php
if   (  $_POST['user'] != null && $_POST['passwd'] != null )
{
    echo "Willkommen auf der Kundenseite alles OK<br><br>";
    
// Daten ueberpruefen
$benutzer = trim($_POST['user']);
$password = trim($_POST['passwd']);
    
// nur user aus DB anmelden
include('sites/dbconnect.php');
  $sql = "SELECT id FROM user WHERE username = '{$benutzer}' AND password = '{$password}'";   
  $result = mysql_query($sql);
  $row = mysql_fetch_assoc($result);
  $id = $row['id'];
  echo 'BenutzerID: '. $id.'<br>';
  
// Anzahl ausgeben   
  $anzahl = mysql_num_rows($result);
  echo "Anzahl der Datens&auml;tze: $anzahl<br>";
  
  if(isset($id)){
    echo "Der Benutzer ".$id." wurde in der Datenbank gefunden<br />";
    }
    else {
      echo "Der Benutzer wurde nicht in der Datenbank gefunden<br />"
        .mysql_error()."<br />";
    }
    
  $sql = "SELECT username, password, time FROM user WHERE id = '{$id}'";   
  $result = mysql_query($sql);
  $row = mysql_fetch_assoc($result);
  $username = $row['username'];  
  $password = $row['password'];
  $time = $row['time'];
    
    echo 'Benutzer: '.$username.'<br>';
    echo 'Password: '.$password.'<br>';
    echo 'Time: '.$time.'<br>';
  
if($_POST['user'] == $username && $_POST['passwd'] == $password){
  $login = true;
  $benutzerid = session_id();
  echo "Login Erfolgreich<br>";
  
echo '<div id="sign">';
  echo "Benutzer: <b>".$user."</b><br>";
  echo "Passwort: <b>".$passwd."</b><br>";
  echo "BenutzerID: <b>".$login."</b><br>";
  echo "SessionID: <b>".$benutzerid."</b><br>";
echo '</div>';
  $_SESSION['user'] = $user;
  $_SESSION['passwd'] = $passwd;
  $_SESSION['login'] = $login;   
  }
  else {
    echo "Benutzername und Passwort ->  MURKKSSSSS<br>";
    echo "Der Benutzer wurde nicht in der Datenbank gefunden<br />";
  } 
} 
else {
?>
<div class="form">
  <form action="index.php?action=usercheck" method="POST">
    <table border="0" cellpadding="0" cellspacing="4" class="login">
      <tr>
       <th colspan="2">Melden Sie sich hier bitte an.</th>
      </tr>
      <tr>
       <td align="right">User</td>
       <td><input name="user" type="text" size="30" maxlength="30"></td>
      </tr>
      <tr>
       <td align="right">Password:</td>
       <td><input name="passwd" type="password" size="30" maxlength="40"></td>
      </tr>
      <tr>
       <td>&nbsp;</td>
       <td><input type="submit" name="send" value=" Absenden ">
           <input type="reset" value=" Abbrechen">
       </td>
      </tr>
      <tr>
       <td>&nbsp;</td>
       <td><div class="melden"><input type="checkbox" name="kern" value="false">angemeldet bleiben ?</div>
       </td>
      </tr>
      <tr>
       <td>&nbsp;</td>
       <td><div class="melden">* Passwort <a href="index.php?action=forgot">vergessen</a>?</div></td>
      </tr>
      <tr>
       <td>&nbsp;</td>
       <td><div class="melden"><a href="index.php?action=Register">Nicht registriert?</a></div></td>
      </tr>
    </table>
  </form>
</div>
<?php
}
?>

ich sehe einfach den Fehler nicht. Kann mir jemand helfen?
Vielen Dank
Gruß
Matze
 
So schon probiert?
PHP:
// Wird ausgeführt um mit der Ausgabe des Headers zu warten. 
ob_start (); 

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

header ("Location: wosolleshingehen.php"); 
ob_end_flush ();

mfg Spikaner
 
Zuletzt bearbeitet:
Hallo spikaner,

habs gerade probiert mit deinem Lösungsvorschlag. Die Variable ist nach wie vor auf 1 gesetzt.
Trotzdem danke für deine Hilfe.

Gruß
Matze
 
Zurück