login + session

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • login + session

    Hallo Leute,

    ich bräuchte mal zu folgenden code ein wenig Rat:

    anmelden.php
    PHP-Code:
    <?
    session_name("s");
    session_start(); 
    // datenbankanbindung 
    //Korrektur
     /*if(!session_is_registered('com')) */ //ist noch aus dem alten script
    if(!isset($_SESSION['com']))
    {
        $_SESSION['com'] = "false";
        $_SESSION['mail'] = "";
        $_SESSION['kat'] = "";
        $_SESSION['menue'] = "";
        $_SESSION['subMenue'] = "";
        $_SESSION['sessionId'] = rand() . rand();
        $_SESSION['gesamtpreis2'] = "";
        $_SESSION['porto'] = "";
        $_SESSION['best'] = "";
        $_SESSION['b_counter'] = "0";
        $_SESSION['b_id'] = "";
        $_SESSION['langu'] = "de";
    }

    if($action != "abwicklung")
    {
        $_SESSION['best'] = "";
    }
    //Sprache includen etc.    
    if($katId == "")
    {
        $_SESSION['kat'] = "";
    }
    if(einige Abfragen zwecks login)
    {
    //passwort und Email checken, wenn korrekt, dann wird folgendes includet:
        include($dateiPfad . "themes/user/bs_log_ang.inc.php");    
    }
    ?>
    bs_log_ang.inc.php
    PHP-Code:
    <?
    $_SESSION['com'] = "true";
    $_SESSION['mail'] = $_POST['email'];

     //include von header, tabellen, content etc.
    // Template - ausgabe das der kunde angemeldet ist und ein Link
    zur nächsten Seite: /bestellen/index.php
     ?>
    bestellen/index.php
    PHP-Code:
            session_name("s");
            
    session_start();  
        
    // datenbankanbindung
    //Korrektur
     /*if(!session_is_registered('com')) */ //ist noch aus dem alten script
    if(!isset($_SESSION['com']))
    {
        
    $_SESSION['com'] = "false";
        
    $_SESSION['mail'] = "";
        
    $_SESSION['kat'] = "";
        
    $_SESSION['menue'] = "";
        
    $_SESSION['subMenue'] = "";
        
    $_SESSION['sessionId'] = rand() . rand();
        
    $_SESSION['gesamtpreis2'] = "";
        
    $_SESSION['porto'] = "";
        
    $_SESSION['best'] = "";
        
    $_SESSION['b_counter'] = "0";
        
    $_SESSION['b_id'] = "";
        
    $_SESSION['langu'] = "de";
    }

    if(
    $action != "abwicklung")
    {
        
    $_SESSION['best'] = "";
    }
     
    //sprache, etc includen.        
    if($katId == "")
    {
        
    $_SESSION['kat'] = "";
    }
        include(
    $dateiPfad "themes/bestellen/bestellen.php"); 
    bestellen.php
    PHP-Code:
    <?
    if($_SESSION['com'] == "false")
    {
        $von = "warenkorb";
        include($dateiPfad . "themes/bestellen/nicht_angemeldet.inc.php");
    }


    if(($_SESSION['com'] == "true") && ($_POST['action'] != "s2") && ($_POST['action'] != "abwicklung"))
    {
        include($dateiPfad . "themes/bestellen/versand.inc.php");
    }

    if(($_SESSION['com'] == "true") && ($_POST['action'] == "s2") && ($_POST['action'] != "abwicklung"))
    {
        include($dateiPfad . "themes/bestellen/bestellvorgang_tp.inc.php");
    }
    So mein Problem ist einfach das es 100x funktioniert, dann geht es wieder nicht.

    Sozusagen Kunde meldet sich an, klickt auf den Link bestellen/index.php statt jetzt versand.inc. geladen wird fliegt er wieder raus und nicht_angemeldet wird geladen. Dabei wird wohl eine neue session_id erzeugt, da der Warenkorb danach auch wieder leer sein soll.

    Problem: Der Fehler ist bei mir noch nicht aufgetreten.

    Was könnte man am Script verbessern. Sessionid wird auch an die URL angehangen wenn cookie deaktiviert ist.

    EDIT:

    if(!session_is_registered('com')) hatte ich aus dem alten ordner kopiert, aktuell benutze ich: if(!isset($_SESSION['com']))

    Zuletzt geändert von marc75; 14.11.2003, 13:41.
    mfg
    marc75

    <Platz für anderes>

  • #2
    wird session_start auf jeder seite aufgerufen?

    ist die session auf jeder neuen seite vorhanden (weitergabe per URL oder Formular) ?

    gruss

    Kommentar


    • #3
      session_start

      wird in der datei anmelden.php und in der datei bestellen/index.php aufgerufen. Der Rest wird includet und bekommt damit die variablen vererbt. Eine Ausgabe (z.b.html) erfolgt immer erst in den includeten dateien.

      Die session wird per cookie und oder per url weitergegeben. Je nach dem ob cookies erlaubt sind.
      mfg
      marc75

      <Platz für anderes>

      Kommentar


      • #4
        hmm wenn es das auch nicht ist dann rührt das Problem aus Erfahrung
        an einer logischen Bedingung die aufgrund von seltsamen Wertenkonstellationen versagt.

        Da hab ich mir auch schon manchmal die Zähne ausgebissen und das ganze dann auf morgen vertagt. Erst dann sah ich des Messers Scheide....

        In deinem Fall hilft nur Informationen sammeln, alle Fakten zusammen reihen und die ganze Logik nochmals durchspielen irgendwann sieht man den Fehler. Zermürbend aber manchmal notwendig.
        [color=blue]MfG Payne_of_Death[/color]

        [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
        [color=red]Merke:[/color]
        [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

        Murphy`s Importanst LAWS
        Jede Lösung bringt nur neue Probleme
        Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
        In jedem kleinen Problem steckt ein großes, das gern raus moechte.

        Kommentar


        • #5
          hat es vielleicht mit der lifetime was zu tun?

          du sagst bei dir kommt es nicht vor. kann ja sein, das du klickst wie ein verrückter, während der kunde ne halbe std. die seite ansieht?
          ... und besucht mal den ebay(TM)-browser überhaupt: Lauge
          und damit das Fragen nen Ende hat: Der Progger davon sitzt mir gegenüber !

          Kommentar


          • #6
            Original geschrieben von muecke0815
            hat es vielleicht mit der lifetime was zu tun?

            du sagst bei dir kommt es nicht vor. kann ja sein, das du klickst wie ein verrückter, während der kunde ne halbe std. die seite ansieht?
            laut phpinfo:
            session.cookie_lifetime = 0
            session.gc_maxlifetime = 1440


            möglich ist es schon, glaub ich aber in diesem falle nicht, da einige Kunden meinten, sich mehrmals hintereinander vergeblich versucht hatten einzuloggen.
            mfg
            marc75

            <Platz für anderes>

            Kommentar


            • #7
              So hab jetzt sämtliche Dateien nochmal durchgeschaut, teilweise geändert etc..

              Nur ein Problem ist geblieben. Manche Kunden können sich nicht einloggen.
              Email und Passwort sind korrekt. Immerhin erhalten Sie die Seite wo Ihnen mitgeteilt wird das Sie eingeloggt sind Mit deren Namen. Wenn die dann auf den "Weiter" link klicken fliegen sie wieder raus.


              Problem scheint die Sessionvariable "com" zu sein, so das die Variable nach dem neuen session_start nicht zur Verfügung steht oder meine if bedingung in der zweiten Datei bezahlwahl.php lückenb hat.


              Da nach dem fehlgeschlagendem Login der Warenkorb erhalten bleibt, kann man davon ausgehen das die Sessionid auch erhalten bleibt.



              anmelden.php
              PHP-Code:
              <?
              session_name("s");
              session_start(); 
              //gekürzt- siehe an_log.inc.php
              an_log.inc.php
              PHP-Code:
              <?
              //das wird alles includet wenn passwort und email stimmen und die daten vom bestimmten formular kommen.
                  $_SESSION['com'] = "true";
                  $_SESSION['mail'] = $_POST['email'];

              include header html etc;
                  
              $abfrage = "SELECT id,vorname,nachname FROM " . $kunden . " where email = '" . $_SESSION['mail'] . "'";
              $ergebnis = mysql_query($abfrage);
              $row = mysql_fetch_object($ergebnis);

              $tpl_userVorname = $row->vorname;
              $tpl_userNachname = $row->nachname;
              $tpl_userId = $row->id;
              // Contentbereich echo html usw. -gekürzt-

              echo "<BR><H3>Hallo " .$tpl_userVorname. " " .$tpl_userNachname. "</H3>";
              echo "<BR><BR><b><a href=\"" . $urlPfad . "themes/bestellen/bezahlwahl.php?" . session_name() . "=" . session_id() . "\"><u>weiter zur Zahlungsart auswählen</u></a></b><br>";

              include footer html etc;
              ?>

              bezahlwahl.php
              PHP-Code:
              <?
              session_name("s");
              session_start();  
              include config etc;

              if(!isset($_SESSION['com']))
              {
                  $_SESSION['com'] = "false";
                  $_SESSION['mail'] = "";
                  $_SESSION['kat'] = "";
                  $_SESSION['menue'] = "";
                  $_SESSION['subMenue'] = "";
                  $_SESSION['sessionId'] = session_id();
                  $_SESSION['gesamtpreis2'] = "";
                  $_SESSION['porto'] = "";
                  $_SESSION['best'] = "";
                  $_SESSION['b_counter'] = "0";
                  $_SESSION['b_id'] = "";
                  $_SESSION['langu'] = "de";
              }
              include sprache etc;
                  
              if (empty($katId))
              {
                  $_SESSION['kat'] = "";
              }

              if($_SESSION['com'] == "true")
              {
                  include($dateiPfad . "themes/bestellen/versand.inc.php");
              }
              elseif($_SESSION['com'] == "false")
              {
                  $von = "warenkorb";
                  include($dateiPfad . "themes/bestellen/nicht_angemeldet.inc.php");
              }
              else
              {
              echo "Es ist leider ein Fehler in unserem Online-Shop aufgetreten.";
              }
              ?>
              mfg
              marc75

              <Platz für anderes>

              Kommentar


              • #8
                mal noch ne andere frage, kann es sein das die sessions in PHP4.2.3 ein wenig buggy ist?


                reicht es eigentlich folgendes im Header einzutragen damit die Seiten nicht im Cache von proxy und browsern landet.

                PHP-Code:
                         echo "<meta http-equiv=\"cache-control\" content=\"no-cache\">\n";
                        echo 
                "<meta http-equiv=\"pragma\" content=\"no-cache\">\n";
                        echo 
                "<meta http-equiv=\"expires\" content=\"0\">\n"
                mfg
                marc75

                <Platz für anderes>

                Kommentar


                • #9
                  du solttest vielleicht besser

                  PHP-Code:
                  header("Pragma: no-cache"); // für HTTP/1.0 
                  oder
                  header
                  ("Cache-Control: no-cache, must-revalidate"); // für HTTP/1.1 
                  benutzen.

                  was sagt denn eigentlich print_r($_SESSION)? kannst da ja mal herausfinden ob die var lücken hat?!?
                  ... und besucht mal den ebay(TM)-browser überhaupt: Lauge
                  und damit das Fragen nen Ende hat: Der Progger davon sitzt mir gegenüber !

                  Kommentar


                  • #10
                    im Sessionarray

                    sieht es so aus:

                    PHP-Code:
                    Array ( [com] => true [mail] => --zensiert-- [kat] => [menue] => [subMenue] => [sessionId] => 94fe1467f5a5eeb6728908c2137d8b90 [gesamtpreis2] => [porto] => [best] => [b_counter] => [b_id] => [langu] => de 
                    vor dem login halt [com] => false
                    mfg
                    marc75

                    <Platz für anderes>

                    Kommentar


                    • #11
                      hmm, dann müßte if($_SESSION['com'] == "true") auch greifen....

                      warum hast du eigetnlich die sessionID da noch drin? verwendest du diese irgendwo im script?

                      Was könnte man am Script verbessern. Sessionid wird auch an die URL angehangen wenn cookie deaktiviert ist.
                      sicher das es bei dem kunden auch ist, bei dem es nicht funktioniert?
                      ... und besucht mal den ebay(TM)-browser überhaupt: Lauge
                      und damit das Fragen nen Ende hat: Der Progger davon sitzt mir gegenüber !

                      Kommentar


                      • #12
                        das mit der sessionID = sessionid(); hab ich nur noch drin falls ich es in irgendein script vergessen haben sollte zu ändern. Wird momentan eigentlich nutzlos durchgeschleift.

                        Die sessionid wird eigentlich angehangen wenn keine cookies aktiviert sind. Allerdings erzwinge ich den Anhang an die Url im loginscript um sicher zu gehen. Und da die seiten W3C konform sind denke ich mal werden die sessionid´s auch bei den besagten Kunden angehangen. (Immerhin bleibt der Warenkorb ja erhalten, und der braucht auch die sessionid)

                        Hab das Login jetzt erstmal auf DB umgestellt. So das nur die sessionid benötigt wird, mal schauen ob immernoch User/Kunden Probleme haben beim einloggen.
                        mfg
                        marc75

                        <Platz für anderes>

                        Kommentar


                        • #13
                          Hab das Problem gefunden, die Kunden bei denen der Fehler auftrat kamen von Suchmaschinen, die direkt in den Shop gelinkt hatten.

                          Der Fehler liegt/lag in den Rewriterules, dadurch wurde die sessionid nicht gestartet bzw. war leer.
                          mfg
                          marc75

                          <Platz für anderes>

                          Kommentar

                          Lädt...
                          X