tk-zetel: Session wird nicht angezeigt

Hallo,

ich brauche noch mal Hilfe. Ich versuche zur Zeit mit Netobects 11 eine Seite zu gestallten in der ein Kunde eigene Artikel erfassen kann.

Ich habe folgendes geplant der Kunde muss bevor er einen Artikelerfassen kann, sich über ein Login anmelden. Beim Login möchte ich die gewisse Daten die ich aus einer MySQl-Datenbank auslesen zwischenspeichern. Wie ich gelesen habe geht dieses mit $_SESSION, das habe ich auch probiert und es funktioniert auch.

Ich habe mir eine Seite Logo zum testen gemacht, hier lasse ich mir die $_SESSION-Daten mit echo anzeigen, dass klappt auch wunderbar. Wenn ich jetzt aber auf meine Artikelerfassenseite gehe, will das Programm nichts mehr von den $_SESSION-Daten wissen, hier bekomme ich nichts angezeigt.

Loginseite (html)
              |
                               Loginseite (php) ------                  Artikelerfassen (html)
               | |
                               Logoseite (php) zum testen                   Artikelerfassen (php)

PHP-Code Loginseite

<?php
session_start();
?>

<?php

$GEMAIL2 = mysql_real_escape_string($_POST["GEMAIL2"]);
      $PWABFRAGE = mysql_real_escape_string($_POST["PWABFRAGE"]);

if($GEMAIL2  =="" OR $PWABFRAGE =="")
              {
              echo "Eingabefehler. Bitte alle Felder ausfüllen. <a
              href="Gxxxxxxxxxxxxx.html">Zurück<a/>";
              exit;
              }

$ergebnis = mysql_query("SELECT * FROM Gxxxxxxxxxx  WHERE GEMAIL2 LIKE '$GEMAIL2' LIMIT 1 ");

while ($row = mysql_fetch_object($ergebnis)){
   $id = $row -> id;
   $GEMAIL2 = $row -> GEMAIL2;
   $GPASSWORT2 = $row -> GPASSWORT2;
   $FIRMA = $row -> FIRMA;
   $GPLZ = $row -> GPLZ;
   $GORT = $row -> GORT;
       }

if($PWABFRAGE == $GPASSWORT2)
    {
    $_SESSION["GEMAIL2"] = $GEMAIL2;
    $_SESSION["FIRMA"] = $FIRMA;
    $_SESSION["GPLZ"] = $GPLZ;
    $_SESSION["GORT"] = $GORT;
    }
 else
    {
     echo "Benutzername und/oder Passwort waren falsch. <a href="html\gxxxxxxxxxxxxlogin.html">Login</a>";
    }

mysql_close($verbindung);

?>

-------------------------------------------------------------------------------------------------------------------------

Mit der Logoseite(nur testweise) prüfen ich ob die Sessionsache überhaupt klappt. Auf der Logoseite bekomme ich die Daten auch fehlerfrei angezeigt.

Seite Logo:
<?php
session_start();
?>

<?php echo $_SESSION["GEMAIL2"]; ?>

<?php echo $_SESSION["FIRMA"]; ?>

<?php echo $_SESSION["GPLZ"]; ?>

<?php echo $_SESSION["GORT"]; ?>

Ich habe folgenden Code in der Artikelerfassenseite gespeichert:

<?php
session_start();
?>

(Habe ich nur eingefügt um zu testen, ich bekomme aber leider nichts angezeigt oder gespeichert)

<?php echo $_SESSION["GEMAIL2"]; ?>

<?php echo $_SESSION["FIRMA"]; ?>

<?php echo $_SESSION["GPLZ"]; ?>

<?php echo $_SESSION["GORT"]; ?>

<?

Hier stehen sonst die Zugangsdaten usw.

// Artikeldaten in die Datenbank speichern

$Artikelnummer = mysql_real_escape_string($_POST["Artikelnummer"]);
     $Datum = mysql_real_escape_string($_POST["Datum"]);
     $Email = mysql_real_escape_string($_POST["Email"]);
     $Firma = mysql_real_escape_string($_POST["Firma"]);
     $Plz = mysql_real_escape_string($_POST["Plz"]);
     $Standort = mysql_real_escape_string($_POST["Standort"]);
     $Hauptkategorie = mysql_real_escape_string($_POST["Hauptkategorie"]);

$Hersteller = mysql_real_escape_string($_POST["Hersteller"]);
usw.

$Hauptkategorie = "Polstermoebel";
      $Datum = date();  (Ich möchte hier das Datum speichern)

$Email = $_SESSION["GEMAIL2"];
      $Firma = $_SESSION["FIRMA"];
      $PLZ = $_SESSION["GPLZ"];
      $Standort = $_SESSION["GORT"];

$eintrag="INSERT INTO Artikel(Hauptkategorie,Datum,Email,Firma,Plz,Standort, Artikelherkunft,Artikelbezeichnung,Hersteller,Kategorie,Modellname
         )VALUES('$Hauptkategorie','$Datum','$Email','$Firma','$Plz','$Standort','$Artikelherkunft','$Artikelbezeichnung',
         '$Hersteller','$Kategorie','$Modellname')";

$eintragen=mysql_query($eintrag);

mysql_close($verbindung);

?>

------------------------
Habt Ihre eine Ahnung warum es nicht funktioniert?

Gruß Thomas

  1. Habt Ihre eine Ahnung warum es nicht funktioniert?

    Wie übergibst Du die Session-ID?

    1. Habt Ihre eine Ahnung warum es nicht funktioniert?

      Wie übergibst Du die Session-ID?

      Hallo danke für die Tipps. Ich war bis jetzt davon ausgegangen das die SID automatisch übergeben wird. Solange ich die Seiten aufrufe die nach dem Login kommen ist alles okay. Sobald ich die anderen Seiten aufrufe fehlt die SID.

      Wie kann ich diesen Seiten die SID zuweisen. Wie ich gelesen haben geht das normalerweise über Cookies, bei meiner Seite scheint dieses aber noch nicht zu funktionieren.

      Für einen Tipp wäre ich sehr dankbar.

      Gruß Thomas

      1. hi,

        Für einen Tipp wäre ich sehr dankbar.

        Die Session ID kriegst Du aus dem Cookie:
        // Session-id
        $sid = (isset($_COOKIE[$sessName])) ? $_COOKIE[$sessName] : '';

        Und das auch, wenn Du die Login-Seite verlässt, vorausgesetzt, dort wurde der Cookie auch gesetzt, sofern Login erfolgreich war. Was Da auch noch gemacht werden muss: Diese $sid muss serverseitig hinterlegt werden, beispielsweise in MySQL.

        Nun musst Du auf jeder weiteren Seite nur noch prüfen, ob die Session gültig ist, die $sid hast Du aus dem Cookie. Die Gültigkeit ergibt sich daraus, dass es zur $sid vom Cookie eine 'sid' in der Datenbank gibt, das ist Alles.

        Beispiel:

          
        if(parameterKram()){  
          // Cookie setzen  
          // Ajax-Geraffel  
        }  
        else{  
          header("Content-type: text/html; charset=UTF-8");  
          echo htmlUp();  
        	  
          if($nick = validSession($db, $sid)) echo talkForm($nick);  
          else echo loginForm();  
        	  
          echo htmlDown();  
        }  
        
        

        Hotti

      2. Hi,

        Wie übergibst Du die Session-ID?

        Ich war bis jetzt davon ausgegangen das die SID automatisch übergeben wird.

        Das wird sie idR. auch.

        Solange ich die Seiten aufrufe die nach dem Login kommen ist alles okay. Sobald ich die anderen Seiten aufrufe fehlt die SID.

        Dir ist aber schon bewusst, dass du auch auf jeder Folgeseite session_start aufrufen musst …?

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
      3. Habt Ihre eine Ahnung warum es nicht funktioniert?

        Wie übergibst Du die Session-ID?

        Hallo danke für die Tipps. Ich war bis jetzt davon ausgegangen das die SID automatisch übergeben wird.

        Automatisch übergeben eventuell (siehe z.B. session.use_cookies und session.use_trans_sid), eventuell fehlt (oder funktioniert nicht, siehe z.B. session_name()) das automatische Übernehmen.

        Lesestoff: http://de.php.net/manual/de/book.session.php

        Wie kann ich diesen Seiten die SID zuweisen. Wie ich gelesen haben geht das normalerweise über Cookies

        Man kann Session-IDs auch über Felder in Formularen oder über Parameter in der url übergeben. Letzteres kann man auch automatisieren (session.use_trans_sid) und beides ist von Cookies, die nicht jeder annimmt, unabhängig.

        Bei der Session-ID in der url sollte man aber darauf achten, daß Suchmaschinen irgend möglich nur ID-freie Links zu sehen bekommen, die SID also eher nicht ganz so automatisiert anhängen, sondern z.B. nur für die die sich anmelden.

        ... bei meiner Seite scheint dieses aber noch nicht zu funktionieren.

        Dann betreibe Fehlersuche, prüfe was da ist und was benötigt wird.

  2. Hello,


    Habt Ihre eine Ahnung warum es nicht funktioniert?

    erstmal wahrscheinlich daran, dass ein Fehler drin ist.
    Da Du aber keinerlei Fehlerbehandlung durchführst, wird es schwer sein, den zu finden.

    Nach jedem mysql_query() solltest Du auch den Fehlerstatus der Datenbank

    mysql_errno($connection)  http://de3.php.net/manual/en/function.mysql-errno.php

    abfragen und wenn dieser größer 0 ist, entsprechende Maßnahmen treffen.

    Und dann könntest Du die Session-Cookies / die Session-ID abfragen und probehalber ausgeben nach dem Session-Start. Dann weißt Du zumindest, ob es dieselbe ist.

    Debugging funktioniert mit PHP am einfachsten durch Erzeugen von Kontrollstrings an den neuralgischen Punkten, die dann zur passenden Zeit mit ausgegeben werden.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hi!

      Nach jedem mysql_query() solltest Du auch den Fehlerstatus der Datenbank

      mysql_errno($connection)  http://de3.php.net/manual/en/function.mysql-errno.php

      abfragen und wenn dieser größer 0 ist, entsprechende Maßnahmen treffen.

      Wieso empfiehlst du hier, eine weitere Funktion zu befragen, obwohl ein Fehlerzustand bereits über sowieso vorliegenden Rückgabewert von mysql_query() erkannt werden kann? Wenn dann der Fehler interessiert, ist die Nummer im Gegensatz zum Meldungstext meist uninteressant.

      Debugging funktioniert mit PHP am einfachsten durch Erzeugen von Kontrollstrings an den neuralgischen Punkten, die dann zur passenden Zeit mit ausgegeben werden.

      Ja, var_dump() ist dazu das beste Werkzeug.

      Lo!

      1. Hello,

        Nach jedem mysql_query() solltest Du auch den Fehlerstatus der Datenbank

        mysql_errno($connection)  http://de3.php.net/manual/en/function.mysql-errno.php

        abfragen und wenn dieser größer 0 ist, entsprechende Maßnahmen treffen.

        Wieso empfiehlst du hier, eine weitere Funktion zu befragen, obwohl ein Fehlerzustand bereits über sowieso vorliegenden Rückgabewert von mysql_query() erkannt werden kann? Wenn dann der Fehler interessiert, ist die Nummer im Gegensatz zum Meldungstext meist uninteressant.

        Warum soll ich erst das Rückgabeergebnis abfragen, wenn ich dann für eine automatische Verarbeitung anschließend doch die Fehlernummer benötige? Der Text ist für das Programm meistens unbrauchbar und den User geht er nichts an. Für den Steuerfluss benötige ich eine eindeutige Fehlerklassifizierung, z.B. bei einem optimistischen Insert bei vorhandenen Constraints. Da MUSS ich anschließend die Statusnummer abfragen.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hi!

          Wieso empfiehlst du hier, eine weitere Funktion zu befragen, obwohl ein Fehlerzustand bereits über sowieso vorliegenden Rückgabewert von mysql_query() erkannt werden kann?
          Warum soll ich erst das Rückgabeergebnis abfragen, wenn ich dann für eine automatische Verarbeitung anschließend doch die Fehlernummer benötige?

          Im Gutfall - was wohl deutlich häufiger vorkommen wird - brauchst du die Fehlerbehandlung nicht und da ist der ständige Aufruf der Funktion unnötig, wenn die Unterscheidung bereits anderweitig und billiger getroffen werden kann.

          Für den Steuerfluss benötige ich eine eindeutige Fehlerklassifizierung, z.B. bei einem optimistischen Insert bei vorhandenen Constraints.

          Das ist ein Spezialfall - der einzige, der mir gerade einfällt. Wieviele solcher Spezialfälle gibt es noch? Lohnt es sich für solche Spezialfälle die gesamte andere Verarbeitung aufwendiger zu gestalten?

          Lo!