Sal: Session mit Datenbankverwaltung

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?

  1. 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!