Jessica: Session

Hallo !

Ich hab' jetzt eine halbe Ewigkeit versucht, die Session-Verwaltung in php für den Kundenlogin zu aktivieren. Leider ohne erkennbaren Erfolg. Es wird zwar kein bestimmter Fehler ausgegeben, aber dass liegt wahrschl. daran, dass erst überhaupt nichts aus der SQL-DB ausgelesen wird (Die Verbindung wird aber hergestellt !). Vielleicht liegts aber auch daran, dass ich nicht nur auf eine best. Site verweise, sondern nochmal eine Userspezifizierung vornehmen (Gast, Kunde, Internet).

Mein Skript in Folge ...

<?php

include("setup.inc"); // Varaiablen
include("func_db.inc"); // Verbindung zur SQL-DB

// Verbindung herstellen
$sql_con=dbconnect();

// SQL-Abfrage
$abfrage = "SELECT id,username,passwort FROM benutzer WHERE  username ='$usrname'";

// Abfrage durchfuehren
$result  = mysql_query($abfrage,$sql_con);

// Auslesen aus Datenbank
list($id,$username,$passwort) = mysql_fetch_row($result);
{
$abfrage = "UPDATE sessions SET userid ='$id' WHERE sid ='$sid'";
$result  = mysql_query($abfrage,$sql_con);
}
else
{
if (($username == "gast") and ($passwort == "gast"))
{
echo"<meta http-equiv=Refresh content='0; URL=$gast?sid=$sid'>";
}
elseif (($username == "Internet") and ($passwort == "$pwd") and ($id!= ""))
{
echo"<meta http-equiv=Refresh content='0; URL=$web?sid=$sid'>";
}
elseif (($username!= "") and ($passwort == "$pwd") and ($id!= ""))
{
echo"<meta http-equiv=Refresh content='0; URL=$user?sid=$sid'>";
}
else
{
echo"<span class='d'>";
echo"<p align='center'><img border='0' src='../../images/pfeil.gif'></p>";
echo"<p align='center'>Ihre Anmeldung war leider erfolglos. Bitte uuml;berprüfen Sie Ihre Zugangsdaten.</p><br>";
echo"<p align='center'><img border='0' src='../../images/pfeil.gif'></p><br><br><br>";
echo"<p align='center'>Zugangsdaten vergessen ?  Bitte füllen Sie folgendes Fomular aus :</p><br>";
echo"<p align='center'><a href='reminder.php3' target='main'><img border='0' src='../../images/key.gif'>  <b>Reminder</b></a></p>";
echo"</span>";
}
}
mysql_close();

?>

Vielleicht kann mir ja jemand von Euch weiterhelfen ?!

Danke und Gruss

  1. Hi,

    ich habe Dein Script kurz überflogen und mir sind da spontan zwei Fragen eingefallen:

    a) Woher kommt $sid und wo wird er bestückt?
    b) Warum nutzt Du einen Refresh und keinen header()

    Noch ein kleiner Tip vorweg:

    Bei HTML-Code der keine oder nur wenige PHP-Fragmente enthält ist es unvorteilhaft diesen in "echo"-Segmente zu packen. Das erschwert nachträgliche Änderungen erheblich.

    Beispiel:

    <?php

    ...Script...

    ?>
    <html>
    <head><title></title></head>
    <body>
    <?php echo"Test"; ?>
    </body>
    </html>

    Vorteil: Du kannst sowas dann auch auf Wunsch komfortabel in einem Editor wie z.B. Dreamweaver oder GoLive bearbeiten.

    Gruß

    Axel

    1. Hi,

      ich habe Dein Script kurz überflogen und mir sind da spontan zwei Fragen eingefallen:

      a) Woher kommt $sid und wo wird er bestückt?

      Bei der Abfrage der Benutzerdaten (ID, Username und Passwort) habe ich eine weitere Verknüpfung zur Tabelle sessions eingebunden. Dort soll die ID aus der Tabelle benutzer mit der userid gleichgesetzt werden.

      ... $abfrage = "UPDATE sessions SET userid ='$id' WHERE sid = '$sid'"; ...

      Jeder weitere Link soll dann mit der $sid aus der Tabelle sessions verbunden werden.

      b) Warum nutzt Du einen Refresh und keinen header()

      Mit Header() hab ichs probiert, allerdings kam dann immer wieder als Fehlermeldung zurück, dass die Header-Info bereits übertragen wurde und nicht mehr übertragen werden kann (doppelt). Mit dem Refresh hats dann aber geklappt. Ich weiß aber eigentl. auch nicht, warum der Header include nicht bei dem Skript geht ?!

      Noch ein kleiner Tip vorweg:

      Bei HTML-Code der keine oder nur wenige PHP-Fragmente enthält ist es unvorteilhaft diesen in "echo"-Segmente zu packen. Das erschwert nachträgliche Änderungen erheblich.

      Beispiel:

      <?php

      ...Script...

      ?>
      <html>
      <head><title></title></head>
      <body>
      <?php echo"Test"; ?>
      </body>
      </html>

      Vorteil: Du kannst sowas dann auch auf Wunsch komfortabel in einem Editor wie z.B. Dreamweaver oder GoLive bearbeiten.

      Gruß

      Axel

      1. Hallo!

        ich habe Dein Script kurz überflogen und mir sind da spontan zwei Fragen eingefallen:

        a) Woher kommt $sid und wo wird er bestückt?

        Bei der Abfrage der Benutzerdaten (ID, Username und Passwort) habe ich eine weitere Verknüpfung zur Tabelle sessions eingebunden. Dort soll die ID aus der Tabelle benutzer mit der userid gleichgesetzt werden.

        Wies sieht die Abfrage aus und wie hast Du das "verbunden"?

        ... $abfrage = "UPDATE sessions SET userid ='$id' WHERE sid = '$sid'"; ...

        in $sid steht nicht automatisch die SessionID, wofür verwendest Du die Tabelle "Sessions"? Die Sessiondaten werden standardmmäßig automatisch in Dateien gespeichert, aber darum mußt Du Dich nicht kümmern, das ist ja gerade das gute an Sessions! Ich würde vielelicht lieber die UserID als Variable in der Session speichern.

        Jeder weitere Link soll dann mit der $sid aus der Tabelle sessions verbunden werden.

        ???
        Was meisnt Du diesmal mit "verbunden werden"? In der Standardeinstellung wird nachdem die Session mit session_start() gestartet wurde an jeden Link die SessionID als Parameter angehängt, der Sessionname ist standardmäßt $PHPSESSID

        b) Warum nutzt Du einen Refresh und keinen header()

        Mit Header() hab ichs probiert, allerdings kam dann immer wieder als Fehlermeldung zurück, dass die Header-Info bereits übertragen wurde und nicht mehr übertragen werden kann (doppelt). Mit dem Refresh hats dann aber geklappt. Ich weiß aber eigentl. auch nicht, warum der Header include nicht bei dem Skript geht ?!

        Vor dem Header darf kein Ausgabe wie echo(), print() oder sowas erfolgen.
        In der Fehlermeldung sollte genau gestanden haben, wo bereits eine Ausgabe erfolgt ist.

        Viele Grüße
        Andreas

      2. Hi,

        habe Dein Script eben gerade mal bearbeitet und festgestellt, das da einige Macken drin sind. Zum einen fehlt eine IF-Bedingung und zum anderen gibt es im Fall der "UPDATE"-Query keinen Output für den User.

        Mir ist immer noch nicht ganz klar, woher $sid kommt. Schließlich brauchst Du den ja für die Updatequery...

        Gruß

        Axel

        Anbei mal meine - schnell - zusammengeklebte Version:

        <?php

        error_reporting(255);    // Zum Testen
         error_reporting(0);    // Produktiveinsatz

        // Testscript ohne Anspruch auf Richtigkeit
         // ----------------------------------------
         // Funktionsblöcke einbinden

        require_once("setup.inc");   // Variablen
         require_once("func_db.inc");  // Verbindung zur SQL-DB

        // Lokale Deklarationen

        $error_con   = "Verbindung zur Datenbank fehlgeschlagen";

        $getuser   = "SELECT id,username,passwort
                FROM benutzer
                WHERE  username ='".$usrname."'";

        $updatesession = "UPDATE sessions
                SET userid ='{id}'
                WHERE sid ='".$sid."'";

        // Datenbank Operationen durchführen

        $sql_con = dbconnect();   // Verbindung herstellen

        if($sql_con)
         {
          // Verbindung zur Datenbank besteht

        $the_user = mysql_fetch_array(mysql_query($getuser,$sql_con));

        if(<ABFRAGE FEHLT LEIDER>)
          {
           // Session Updaten

        mysql_query(str_replace("{id}",$the_user["id"],$updatesession),$sql_con);
           mysql_close($sql_con);

        // KEIN OUTPUT???
          }
          else
          {
           mysql_close($sql_con);

        if (($the_user["username"] == "gast") and ($the_user["passwort"] == "gast"))
           {
            echo"<meta http-equiv=Refresh content='0; URL=$gast?sid=$sid'>";
            exit;
           }
           elseif (($the_user["username"] == "Internet") and ($the_user["passwort"] == "$pwd") and ($the_user["id"] != ""))
           {
            echo"<meta http-equiv=Refresh content='0; URL=$web?sid=$sid'>";
            exit;
           }
           elseif (($user["the_username"] != "") and ($the_user["passwort"] == "$pwd") and ($the_user["id"] != ""))
           {
            echo"<meta http-equiv=Refresh content='0; URL=$user?sid=$sid'>";
            exit;
           }
           else
           {
            echo"<span class='d'>";
            echo"<p align='center'><img border='0' src='../../images/pfeil.gif'></p>";
            echo"<p align='center'>Ihre Anmeldung war leider erfolglos. Bitte uuml;berprüfen Sie Ihre Zugangsdaten.</p><br>";
            echo"<p align='center'><img border='0' src='../../images/pfeil.gif'></p><br><br><br>";
            echo"<p align='center'>Zugangsdaten vergessen ?  Bitte füllen Sie folgendes Fomular aus :</p><br>";
            echo"<p align='center'><a href='reminder.php3' target='main'><img border='0' src='../../images/key.gif'>  <b>Reminder</b></a></p>";
            echo"</span>";
            exit;
           }

        }
         }
         else
         {
          // Verbindung zum Datenbankserver fehlgeschlagen
          echo $error_con;
          exit;
         }

        ?>