Forum Doku Wiki Blog

Forumsarchiv 2010, Februar
Session mit Datenbankverwaltung

archivierte Beiträge lesen

  1. (DATENBANK) Session mit Datenbankverwaltung von Sal, 17. 02. 2010, 08:14

Session mit Datenbankverwaltung

Der folgende Beitrag wurde am 17. 02. 2010, 08:14 Uhr von Sal veröffentlicht.

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?

Session mit Datenbankverwaltung

Der folgende Beitrag wurde am 17. 02. 2010, 09:04 Uhr von dedlfix veröffentlicht.

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!

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4