Oliver Baer: Sessions

Hi,

ich hab hier ein kleines Problem mit Sessions. Das Anlegen und so klappt, nur leider funktioniert der Logout Button nicht. Die Session bleibt trotzdem bestehen und wenn ich dann auf ne geschützte Seite gehe, lässt er mich auch rauf, obwohl ich eigentlich erst das Login Formular angezeigt bekommen sollte.

Hier ist n bischen Quellcode, vielleicht fällt jemanden ja was auf:

login.php
<?php $_SESSION['userName'] = "";?>
<?
function authenticate() {
 header("WWW-Authenticate: Basic realm="BeraterNet WWW Authenticate"");
 header("HTTP/1.0 401 Unauthorized");
 print("Du musst eine gültige Kennung besitzen um Zugriff auf diese Seiten zu haben.\n");
 exit;
}
if(!isset($PHP_AUTH_USER)){ authenticate(); }
else {
 $c=mysql_pconnect("localhost","root","********");
 mysql_select_db("beraternet",$c);
 $q=sprintf("SELECT * FROM user WHERE username='%s' AND passwort='%s'", $PHP_AUTH_USER,$PHP_AUTH_PW,$REMOTE_ADDR);
 $q=mysql_query($q) or die(mysql_error());
 $row_q = mysql_fetch_assoc($q);
 if(mysql_num_rows($q)==0){ authenticate(); }
}
session_start();
session_register("userName, userPersID, userLevel");
$_SESSION['userName'] = $PHP_AUTH_USER;
$_SESSION['userPersID'] = $row_q['u_id'];
$_SESSION['userLevel'] = $row_q['u_level'];
?>
//hier kommt dann der weiterleitungskrams...

Auf jeder Seite ist die Datei check_session.php includet, also werden die Sessions überprüft.

check_session.php
<?php
 session_start();
 session_register("userName, userLevel, userPersID");
 if ($_SESSION['userName'] == "" && $_SESSION['userPersID'] == "" && $_SESSION['userLevel'] == "")
  {
  header("HTTP/1.0 401 Unauthorized");
  header("Location: login.php");
  }
  else
  {
  $username = $_SESSION['userName'];
  $userid   = $_SESSION['userPersID'];
  $userlevel = $_SESSION['userLevel'];
  }
?>

Soweit so gut, wenn ich n echo $_SESSION['userName'] mache zeigt er den auch an.
Und hier nun die logout.php

logout.php
<?php
session_start();
session_unregister ("userName, userPersID, userLevel");
session_unset();
session_destroy();
header("HTTP/1.0 401 Unauthorized");
header("location: goodbye.php");
echo "Erfolgreich ausgeloggt!!";
?>

Dann soll er auf ne andere Seite gehen auf der dann ein Link auf die login.php ist. Wenn ich auf diesen Link klicke dann logt er sich mit den alten Benutzerdaten wieder ein. Das soll so nicht sein. Man muss dann nochmal das Passwort und den Namen eingeben. Da das nicht der Fall ist vermute ich das die Session noch irgendwo besteht. Oder muss ich den Browser komplett beenden um die Sessiondaten zu löschen.

Vielen Dank für eure Antworten und sorry für die menge an code.

oli

  1. Hi oli!

    hier steht alles zum Thema http://www.dclp-faq.de/ch/ch-version4_session.html

    ciao Sven

  2. Hallo,

    header("WWW-Authenticate: Basic realm="BeraterNet WWW Authenticate"");

    Ehm, warum vermischt Du Sessions mit HTTP-Authentifizierung? Wenn Du nicht genau weißt, was Du tust und warum Du das tust, lasse es lieber. Entscheide Dich für "reine" Sessions.

    Ein sehr einfaches Beispiel habe ich mit Google unter http://www.f078.net/php/tutorial/php/php_140902.php gefunden. Den Link zu Sessions hat Dir Sven schon gepostet.

    Grüße,

    Christian

    --
    Sollen sich alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen und nicht mehr davon erfasst haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst.
                          -- Albert Einstein
    1. hi,

      Ehm, warum vermischt Du Sessions mit HTTP-Authentifizierung? Wenn Du nicht genau weißt, was Du tust und warum Du das tust, lasse es lieber. Entscheide Dich für "reine" Sessions.

      mmh, vielleicht weil ich wirklich nicht weiss was ich tue. nun denn: ich hielt das für eine gute möglichkeit, weil ich momentan an einer sache bastel, die eine relativ sichere Authentifizierung braucht. Solange programmiere ich noch nicht in php, bloss die projekte, an denen ich arbeite erfordern den sessionkrams...

      Ein sehr einfaches Beispiel habe ich mit Google unter http://www.f078.net/php/tutorial/php/php_140902.php gefunden. Den Link zu Sessions hat Dir Sven schon gepostet.

      der link ist gut, danke...

      Grüße,
      Christian

      oli