Christian Seiler: Sessions in Datenbank speichern

Beitrag lesen

Hallo,

Ich möchte bei erfolgreichem Einloggen eines Users mit Benutzername und Kennwort diesem eine Session-ID zuteilen, welche in einer MySQL Datenbank abgespeichert wird! Diese Session soll über die Datenbank auf einer anderen PHP-Seite zur Verfügung stehen, da in der Session die Variable "steckt" ob der User Adminfukntionen benutzen darf oder nicht...

ich glaube, Du verwechselst da etwas. Sessions != Benutzermanagement. Mit Sessions kannst Du Variablen über mehrere PHP-Seiten verwenden. Das hat vorerst nichts mit einem Benutzermangement zu tun. Wenn Du die Sessions in einer Datenbank speichern willst, dann hilft Dir http://phpbuilder.com/columns/ying20000602.php3?page=1 sicherlich weiter.

Dann brauchst Du noch ein Benutzermanagement. Das hat aber eigentlich nicht direkt etwas mit Sessions zu tun. Du brauchst erst mal eine Tabelle, die z.B. so aussieht:

+--------------------+----------------+
| Name des Feldes    | Typ            |
+--------------------+----------------+
| userid             | int            |  <-- primary key, auto_increment
| username           | varchar(30)    |
| password           | varchar(32)    |
| sonstige Infos über den Benutzer    |
+-------------------------------------+

Das Passwort solltest Du übrigens als MD5-Hash abspeichern.

Dann brauchst Du einen Code, der etwas so funktioniert:

--------------- am Anfang jeder Seite, die nicht login/logout.php ist
<?php
require "session_startup.php"
require "login_check.php"
...
----------------------------------------

--------------- session_startup.php
<?php
// Funktionen zum Initialisieren des Session Managements
// u.a. auch session_start
?>
----------------------------------------

--------------- login_check.php
<?php
if (!isset ($_SESSION["user"])) {
  // Weiterleitung auf login.php falls nicht eingeloggt
  $uri = "http://" . $_SERVER["HTTP_HOST"] . dirname ($_SERVER["PHP_SELF"]) . "/login.php";
  Header ("Location: " . $uri);
  exit;
}
?>
----------------------------------------

--------------- login.php
<?php
require "session_startup.php"

// formular wurde abgeschikt
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // benutzernamen und passwort prüfen
  if (prüfung war erfolgreich) {
    $_SESSION["user"] = ...;// hier kommen die user-infos rein
    // entweder eine HTTP-Weiterleitung oder die Anzeige eines
    // Begrüßungsbildschirms
    exit;
  }
  // hier nichts hin, denn wenn die prüfung nicht erfolgreich war
  // dann soll das formular noch mal angezeigt werden
}

?>
<form ...>
...
</form>
----------------------------------------

--------------- logout.php
<?php
require "session_startup.php"

unset ($_SESSION["user"]);

// entweder wieder eine Weiterleitung (z.B. auf login.php)
// oder eine Anzeige, dass der Logout erfolgreich war

?>
----------------------------------------

Grüße,

Christian