Session mit Datenbankverwaltung
Sal
- datenbank
0 dedlfix
Hallo zusammen,
ich habe ein Problem, ich möchte eine Sessionverwaltung mittels Datenbank umsetzen, allerdings trägt mein Script weder die Session ID, noch den Timestamp in die DB ein, sondern lehnt die Anfrage immer mit meiner eigenen Fehlermeldung "zu lange inaktiv" ab... setze ich den Timestamp und die Session ID manuell ein, so findet das Script beides und löscht die entsprechendne Einträge aus der DB. also muss eine generelle Verbindung zu DB und zur richtigen Tabelle existieren, aber warum wird denkt das Script die Session sei veraltet, obwohl sie max ein paar Sek. alt ist?
Hier das Script:
<?php
session_start(); // Start bzw. Aufruf einer Session
?>
<?php
echo "Die Session ID lautet " .session_id(). "<br>"; // Ausgabe der Session ID
/* Verbindungsaufbau zur Datenbank */
$server = "datenbank.de";
$user = "0815";
$pass = "test";
$database = "check";
$table = "table_session_ID";
$Spalte_ID = "session_ID";
$Spalte_time = "Zeitstempel";
echo "<br>Nehme Verbindung zur Datenbank <b>$database</b> auf dem Server <b>$server<b> auf...";
$verbindung = @mysql_connect($server, $user, $pass)
or die ("Konnte keine Verbindung zum Server <b>$server</b> herstellen.");
echo "<br>Verbindung zum Server <b>$server</b> hergestellt.";
mysql_select_db($database, $verbindung)
or die ("Fehler beim Zugriff auf die Datenbank <b>$database</b>.");
echo "<br>In die Datenbank <b>$database</b> gewechslet...";
$sql = "SELECT * From $table";
if(mysql_query($sql))
echo "<br>SQL-Anweisung erfolgreich...";
else
echo "<br>SQL-Anweisung fehlgeschlagen... SQL-Fehler:" . mysql_error();
/* Zeitspempel der jeweiligen Session in der Datenbank verwalten */
$timeout = 60*5; //Timeout der Session wird auf 5 Minuten gesetzt (60 Sek * 5)
$session_id = session_id(); // Session ID auslesen
// letzen Timestamp auslsen
$sql2 = "SELECT $Spalte_time
FROM $table
WHERE session_ID ='$session_id'";
$erg = mysql_query($sql2);
if (false===$erg)
{
die ("Konnte Timestamp nicht auslesen");
}
$zeile = mysql_fetch_assoc($erg);
echo "<br>" . mysql_error() . "<br>";
//Überprüfung ob die aktuelle Session noch aktuell ist
if (time() > $zeile["Zeitstempel"]+$timeout)
{
session_destroy(); // Session ist nicht mehr aktuell und wird zerstört...
$sql2 = "DELETE FROM $table
WHERE $Spalte_ID = '$session_id'"; // ...und der Tabelleneintrag wird gelöscht
mysql_query($sql2);
echo "Sie waren zu lange inaktiv.<br>";
echo "Die Session wurde aus Sicherheitsgründen automatisch beendet!<br>";
echo "Bitte melden Sie sich erneut an";
}
else // Session ist noch aktuell und ein neuer Zeitstempel wird gesetzt
{
$sql2 = "UPDATE $table
SET ($Spalte_time ='".time()."')
WHERE Spalte_ID = '$session_id'";
$erg = mysql_query($sql2);
if (false===$erg)
{
die ("Konnte den Zeitstempel nicht aktualisieren");
}
/* Rest der Seite */
}
/* Verbindungsabbau der Datenbank*/
mysql_close($verbindung);
echo "<br>Verbindung beendet.";
?>
Die Datenbank hat zwei Spalten, eine "session_ID" und eine "Zeitstempel"
Wo ist mein Denkfehler?
Hi!
ich habe ein Problem, ich möchte eine Sessionverwaltung mittels Datenbank umsetzen, allerdings trägt mein Script weder die Session ID, noch den Timestamp in die DB ein, sondern lehnt die Anfrage immer mit meiner eigenen Fehlermeldung "zu lange inaktiv" ab...
Versuch bitte zunächst selbst herauszufinden, an welcher Stelle deines Scripts welche Werte anders sind als du es dir vorgestellt hast. Verwende dazu Kontrollausgaben, am besten mit var_dump(). Wenn diese Werte vorher in einem anderen Schritt berechnet wurden, erkunde auch die Werte der Operanden, und so weiter.
Lo!