Erstes Login mit Session

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

  • Erstes Login mit Session

    Hallo,

    ich bin grad an meinem Login System und mache jetzt gerade die login.php, welche logishcerweise für das einloggen zuständig sein soll:

    PHP-Code:
    <?php

    include './include/connect.inc'

    $sql_right_passwort="SELECT
      username,
      passwort 
    FROM 
      users
    WHERE 
      username ='"
    .mysql_real_escape_string($_POST['username'])."'
    AND
      passwort ='"
    .md5(mysql_real_escape_string($_POST['passwort']))."' ";

    $result_sql_right_passwort mysql_query($sql_right_passwort) OR die(mysql_error());
     
    $right_passwort mysql_fetch_array($result_right_passwort);


    if(
    $_POST['Send'] && mysql_num_row($result_right_passwort))
    {
        
    session_start();
        
    $_SESSION['logged_in'] = $right_passwort['passwort'];
    }
     
    ?>
    Ist das so in Ordnung? Aber jetzt muss ich ja auf jeder Seite, die ich Passwortgeschützt haben möchte alles aus der SQL Tabelle rausziehen um z.B. zu gucken ob das Passwort richtig ist, oder?

    Außerdem frage ich mich, ob ich auf jeder Seite, die ich passwortschützen möchte eine neue Session starten muss? NE oder?

    Sessions müssen nicht im Header gemacht werden, oder verstehe ich das falsch? Ist doch nur bei Cookies so. Das sit für mich eine wichtige Frage, denn sonst kann ich diese Datei ja nicht includen, da dann der Header schon gesendet ist. Und nicht includet würde das nen bissl doof aussehen.

    EDIT:

    Nochwas. Ist es sinnvoller alle Daten eines in der SESSION abzuspeichern und sie von dort abzufragen oder soll ich lieber jedes mal wenn ich was brauch eine SQL Abfrage machen?
    Zuletzt geändert von Lexus_Ks; 08.06.2006, 21:44.
    -Am Anfang war das Wort-

    Ich habe fertig mit Abi ^^

  • #2
    Re: Erstes Login mit Session

    Lass das MD5 die DB machen.

    Aber jetzt muss ich ja auf jeder Seite, die ich Passwortgeschützt haben möchte alles aus der SQL Tabelle rausziehen um z.B. zu gucken ob das Passwort richtig ist, oder?
    Nein, du mußt nur die Session fortsetzen und wenn sie logged_in enthält, ist alles in Ordnung.

    Außerdem frage ich mich, ob ich auf jeder Seite, die ich passwortschützen möchte eine neue Session starten muss? NE oder?
    Herrje lies doch erstmal das Manual oder ein Tutorial bevor du Sicherheit mit Techniken implementierst, die du nicht beherrschst.

    Sessions müssen nicht im Header gemacht werden, oder verstehe ich das falsch?
    Falsch? Du verstehst es irgendwie gar nicht, kann das sein. Nochmal: Erst lesen, dann umsetzen.

    Nochwas. Ist es sinnvoller alle Daten eines in der SESSION abzuspeichern und sie von dort abzufragen oder soll ich lieber jedes mal wenn ich was brauch eine SQL Abfrage machen?
    DB-Daten, die sich zwischen zwei Requests ändern könnten, sollte man frisch aus der DB holen, wenn Aktualität eine Rolle spielt. Ansonsten spart man natürlich Laufzeit, wenn man weniger Abfragen machen muß.

    Kommentar


    • #3
      quote:
      --------------------------------------------------------------------------------
      Aber jetzt muss ich ja auf jeder Seite, die ich Passwortgeschützt haben möchte alles aus der SQL Tabelle rausziehen um z.B. zu gucken ob das Passwort richtig ist, oder?
      --------------------------------------------------------------------------------

      Nein, du mußt nur die Session fortsetzen und wenn sie logged_in enthält, ist alles in Ordnung.
      Ja und dass muss ich doch mit irgendwas vergleichen oder? Sonst kann man doch bestimtm die Session irgendwie so manipulieren, dass da irgendwas drin steht??

      quote:
      --------------------------------------------------------------------------------
      Außerdem frage ich mich, ob ich auf jeder Seite, die ich passwortschützen möchte eine neue Session starten muss? NE oder?
      --------------------------------------------------------------------------------

      Herrje lies doch erstmal das Manual oder ein Tutorial bevor du Sicherheit mit Techniken implementierst, die du nicht beherrschst.
      Schon mal dran gedacht dass es auch verwirrend wirken kann wenn man sich 10000 Tutorials durchließt, die Cookies und Sessions behandeln? Ich habe auf jeden Fall gelesen, dass Sessions auch Cookies nutzen, und da Cookies im Header gesetzt werden müssen hätte es ja sein können, dass ich deswegen die Session auch nur im Header starten kann

      Zuletzt geändert von Lexus_Ks; 08.06.2006, 22:04.
      -Am Anfang war das Wort-

      Ich habe fertig mit Abi ^^

      Kommentar


      • #4
        Ja, Sessions laufen über Cookies - genauer die Session-ID läuft immer hin und her - wenn man es so möchte.

        Aber du hast da oben ein "nicht" stehen ...

        Kommentar


        • #5
          Lol... ich glaube ich habe dich falsch verstanden.. Sessions kann man also doch nur im header starten?

          Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /usr/export/www/vhosts/funnetwork/hosting/dusklounge/include/menueseite.inc:4) in /usr/export/www/vhosts/funnetwork/hosting/dusklounge/include/login.inc on line 21

          Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /usr/export/www/vhosts/funnetwork/hosting/dusklounge/include/menueseite.inc:4) in /usr/export/www/vhosts/funnetwork/hosting/dusklounge/include/login.inc on line 21

          Warning: Wrong parameter count for session_get_cookie_params() in /usr/export/www/vhosts/funnetwork/hosting/dusklounge/include/login.inc on line 22
          eingeloggt <--------- das hier ist ein echo, dass ic hnach dem starten der session eingefügt habe um zu sehen obs geht.

          Wo soll ich die denn jetzt um gottes willen hinsetzen? Dann kann ich die Datei doch nicht includen, in der ich die Session starten will? Denn da wo ich sie includen will (im contentbereich) ist der header schon durch -___-
          Zuletzt geändert von Lexus_Ks; 08.06.2006, 23:01.
          -Am Anfang war das Wort-

          Ich habe fertig mit Abi ^^

          Kommentar


          • #6
            Original geschrieben von Lexus_Ks
            Wo soll ich die denn jetzt um gottes willen hinsetzen? Dann kann ich die Datei doch nicht includen, in der ich die Session starten will? Denn da wo ich sie includen will (im contentbereich) ist der header schon durch -___-
            Das ist dein Problem - dann bau dein Script eben etwas intelligenter auf, so dass der Header dann eben noch nicht "schon durch" ist.

            Eingabe - Verarbeitung - Ausgabe

            OffTopic:
            Deine Lernbegierigkeit in allen Ehren - aber müssen deshalb jetzt die Fragen hier eine nach der anderen und Schlag auf Schlag kommen ...?
            Ein bisschen mehr eigenes Nachdenken wäre vielleicht auch nett.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Also mir kann keiner Vorwerfen ich würde es nicht probieren Ich geb mir sehr viel Mühe und manchmal funktioniert es ja auch. Für mich sind nur leider viele Tutorials, oder besser gesagt manche Themen in Tutorials zu schwer beschrieben da komm ich einfach nicht mit. Wenn ichs nen paar mal gemacht hab dann hab ichs auch drauf. Es wäre praktisch wenn ich daheim mal nen paar Tage nen Erfahrenen Programmierer hätte, der mir ständig meine Fragen beantwortet. Aber sowas habe ich leider nicht also poste ich hier.

              Dieser Eingabe-Verarbeitung-Ausgabe Beitrag ist zwar interessant... Aber ich habe doch nicht die Verarbeitung vor die Eingabe gesetzt -___- Ich meine.....

              <head>
              </head>
              <body>

              Hier ist das Loginformular und hier wird auch die Datei includet, die es verarbeitet.

              </body>

              Wie soll ich da dann die Session vor dem Header senden???
              Zuletzt geändert von Lexus_Ks; 08.06.2006, 23:20.
              -Am Anfang war das Wort-

              Ich habe fertig mit Abi ^^

              Kommentar


              • #8
                Original geschrieben von Lexus_Ks
                Wie soll ich da dann die Session vor dem Header senden???
                In dem du es eben nicht mehr so aufbaust.

                Sondern zuerst die hereinkommenden Daten verarbeitest, und anschließend deine Ausgaben machst.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Das richtigste tut wäre grad um die ecke http://www.php-
                  resource.de/tutorials/read/38/1/

                  Kommentar


                  • #10
                    Also ich habs jetzt so gemacht:

                    Ich habe vor den header eine If Abfarge gemacht

                    PHP-Code:
                    <?
                            
                        if($connect) 
                                
                            {
                                
                            include("./include/$connect.inc");
                                
                            } 
                            
                        
                    ?>
                    Und wenn jetzt das Formular gesendet wird, übergebe ich zum einen den Parameter "site=blabla", das ist eine Seite in der ich eine Abfrage stehen habe, ob in der Session was bestimmtes drin steht und zum anderen eben den Parameter "connect=login", welcher auf die PHP Datei verweist, welche das Formular verarbeitet. Jetzt ist es vor dem Header, richtig?

                    Aslo wenn es richtig ist: Es lag nur irgendwie außerhalb meiner Vorstellungskraft, oder bessergesagt mein Kopf sträubte sich zu verstehen, dass da was vor dem Header kommt, denn der ist ja für HTMLer der Anfang des Dokuments.

                    Das funtkioniert auch... die Abfrage in der blabla.inc ist:

                    PHP-Code:
                    <?php
                    if (isset($_SESSION['logged_in']))
                    {
                    echo 
                    "Eingeloggt!!";
                    }
                    else
                    {
                    echo 
                    "Nicht eingeloggt!!";
                    }
                    ?>
                    Aber sobald ich den Parameter Connect nicht mehr übergebe und nur noch site=blabla eingebe, dann steht da wieder Nicht eingeloggt!! .dementsprechend ist dann auf einmal der Inhalt nicht mehr in der Session... kann die so schnell verfallen?

                    Ich poste mal noch den Inhalt von der login.php welche das Formular verarbeite
                    PHP-Code:
                    <?php

                    include './include/connect.inc'

                    $sql_right_passwort="SELECT
                                passwort 
                                 FROM 
                                users
                                 WHERE 
                                username ='"
                    .mysql_real_escape_string($_POST['username'])."'
                             AND
                                passwort ='"
                    .md5(mysql_real_escape_string($_POST['passwort']))."' ";



                    $result_sql_right_passwort mysql_query($sql_right_passwort) OR die(mysql_error());
                     
                    $right_passwort mysql_fetch_array($result_sql_right_passwort);


                    if(
                    $_POST['Send'] && mysql_num_rows($result_sql_right_passwort))
                    {
                        
                    session_start();
                        
                    $_SESSION['logged_in'] = $right_passwort['passwort'];
                    }
                     
                    ?>
                    Zuletzt geändert von Lexus_Ks; 09.06.2006, 00:01.
                    -Am Anfang war das Wort-

                    Ich habe fertig mit Abi ^^

                    Kommentar


                    • #11
                      Re: Re: Erstes Login mit Session

                      Original geschrieben von onemorenerd

                      Nein, du mußt nur die Session fortsetzen und wenn sie logged_in enthält, ist alles in Ordnung.
                      Im Vergleich daz uaus dem Tut welches mir von mai empfohlen wurde:

                      Aus dem Tut, welches Mai empfahl

                      Die erste Zeile startet die Session. Dieser Befehl muss auf allen Seiten stehen, und zwar überall als erster Befehl, da es sonst unter Umständen zu unschönen Fehlermeldungen kommt.
                      Na was ist denn jetzt richtig?
                      -Am Anfang war das Wort-

                      Ich habe fertig mit Abi ^^

                      Kommentar


                      • #12
                        also:

                        Du schreibst oben auf die Seite session_start();

                        Der Header ist was anderes als der head-Bereich des
                        html-Dokuments.

                        Du startest Deine Datenbank-Abfrage.

                        Wenn alles ok ist, dann schreibst Du z.B.:

                        $_SESSION['loggedin'] = "ok";

                        Oben auf den Seiten fragst dann ab, ob der User eingeloggt ist:


                        PHP-Code:
                        if (isset($_SESSION['loggedin'] && $_SESSION['loggedin'] == "ok")
                           {
                            echo 
                        "Du bist eingeloggt";   //hier geht das normale Script weiter
                           
                        }
                            else
                            {
                             echo 
                        "Du hast keine Zugangsberechtigung!< /br>
                             Bitte erst einloggen."
                        ;
                             exit();
                             } 

                        Kommentar


                        • #13
                          Also das habe ich mittlerweile hinbekommen. Danke ^^

                          Ich habe es jetzt so gemacht, dass die Session auf jeden Fall gestartet wird, ob man sich einloggt oder nicht. Aber man bekommt erst den Eintrag den man braucht, wenn man sich einloggt.

                          Und es funzt. Danke für die Geduld
                          -Am Anfang war das Wort-

                          Ich habe fertig mit Abi ^^

                          Kommentar


                          • #14
                            Hmmm, ich hab kürzlich auch mit einem Login zu tun gehabt und kann dir da nur mal PEAR empfehlen. Genauer gesagt das Authentication Package
                            HIER

                            Wenn du das installierst, dann hast du da schon nen wunderbaren Login bei dem du nichts in die DB schreiben musst, Sessionvariablen nutzen kannst und der leicht handzuhaben ist.
                            Also wenn du mal Zeit & Muse hast dann ist das auf jeden Fall nen Blick wert und sicher im nachhinein mit weniger Aufwand geschafft als eine ganz neue Eigenkonstruktion.

                            Kommentar


                            • #15
                              Danke für den gut gemeinten Tipp, aber ich bastel es lieber selber, da
                              lerne und verstehe ich wengstens alles was man so braucht....

                              Aber ich stehe noch vor einen kleinen problem... ich habe mein
                              loginformular im Body includet, das sieht so aus:

                              PHP-Code:
                              <?

                              if(isset($_SESSION['logged_in']))
                                  {
                                  $sql_infobox="SELECT
                                                      username,
                                              icq,
                                              regdat 
                                                      FROM 
                                                      users
                                                      WHERE 
                                                      username ='".mysql_real_escape_string
                              ($_SESSION['username'])."'
                                                  AND
                                                      passwort ='".mysql_real_escape_string
                              ($_SESSION['logged_in'])."' ";
                                      
                                  $result_sql_infobox = mysql_query($sql_infobox) OR die
                              (mysql_error());
                                  
                                  $infobox = mysql_fetch_array($result_sql_infobox);
                                      
                                  echo "Willkommen, ".$infobox['username']."!<br/><br/>\n";
                                  echo "<table>";
                                  echo "    <tr>";
                                  echo "        <td>Du bist seid dem </td>";
                                  echo "        <td rowspan=\"2\"><img
                              src=\"http://web.icq.com/whitepages/online?icq=".$infobox['icq']."&img=5
                              \" /></td>";
                                  echo "    </tr>";
                                  echo "    <tr>";
                                  echo "        <td>".$infobox['regdat']." dabei!</td>";
                                  echo "    </tr>";
                                  echo "    <tr>";
                                  echo "        <td><br/></td>";
                                  echo "    </tr>";
                                  echo "    <tr>";
                                  echo "        <td>Dein letzter Besuch war am
                              <b>".$_SESSION['last_visit']."</b>.</td>";
                                  echo "    </tr>";
                                  echo "</table>\n";
                                  echo "<a href=./index.php?connect=logout>Logout</a>";
                                  }
                              else
                                  {
                                  echo "<form action=\"./index.php?
                              site=login_begruessung&amp;connect=login\" method=\"post\">\n";
                                  echo "    <fieldset>\n";
                                  echo "        <legend><b>Login</b></legend>\n";

                                  echo "        <table cellpadding=\"3\" cellspacing=\"0\"
                              border=\"0\">\n";
                                  echo "            <tr>\n";
                                  echo "                <td>Username</td>\n";
                                  echo "                <td><input
                               type=\"text\" name=\"username\" size=\"9\" maxlength=\"20\" /></td>\n";
                                  echo "            </tr>\n";
                                  echo "            <tr>\n";
                                  echo "                <td>Passwort</td>\n";
                                  echo "                <td><input
                               type=\"password\" name=\"passwort\" size=\"9\" /></td>\n";
                                  echo "            </tr>\n";
                                  echo "            <tr>\n";
                                  echo "                <td></td>\n";
                                  echo "                <td><input
                              type=\"submit\" name=\"Send\" value=\"Login\" /></td>\n";
                                  echo "            </tr>\n";
                                  echo "        </table>\n";
                                  echo "    </fieldset>\n";
                                  echo "</form>\n";
                                  }
                              ?>
                              Wie ihr seht, übergebe ich beim Logout ein Parameter, welches dafür
                              sorgt, dass in dem Code (in der index.php) vor dem header:

                              PHP-Code:
                              <?

                              include './include/connect.inc';
                              session_start();

                              if(@$connect == "") 
                                          
                                  {
                                      
                                  } 

                              else
                                  {
                                  include("./include/$connect.inc");

                                  }
                                          
                              ?>
                              folgendes eingebunden wird:

                              PHP-Code:
                              <?

                              $sql_last_visit="UPDATE
                                          users
                                       SET
                                          last_visit = current_date
                                           WHERE 
                                          username ='".mysql_real_escape_string($_SESSION['username'])."'
                                       AND
                                          passwort ='".mysql_real_escape_string($_SESSION['logged_in'])."' ";
                                          
                              mysql_query($sql_last_visit);

                              session_destroy();
                              ?>
                              Aber wenn ich mich auslogge kommt über dem header meiner index.php folgende Fehlermeldung:

                              Notice: Undefined index: username in /usr/export/www/vhosts/funnetwork/hosting/dusklounge/
                              include/logout.inc on line 8

                              Notice: Undefined index: logged_in in /usr/export/www/vhosts/funnetwork/hosting/dusklounge/
                              include/logout.inc on line 10


                              Was kann man da machen? Könnt ihr diese Fehlermeldung interpretieren?
                              Bzw. wisst ihr wo sie entsteht und vor allem was die nächste Überlegung
                              ist um sie zu beheben?

                              PS: Ich habe schon alles umgebrochen, was man umbrechen konnte, aber die Spalte ist nicht schmaler geworden.
                              Zuletzt geändert von Lexus_Ks; 09.06.2006, 20:12.
                              -Am Anfang war das Wort-

                              Ich habe fertig mit Abi ^^

                              Kommentar

                              Lädt...
                              X