tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
17
ZUGRIFFE
417
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Acriss Acriss ist offline Mitglied Platin
    Registriert seit
    Jun 2007
    Ort
    Lingen (Niedersachsen, zZ in Istanbul)
    Beiträge
    685
    Guten Tag,
    ich habe mir ein login-system mit Sessions und MySQL geschrieben, und stehe vor folgendem Problem:

    Obwohl die Session nicht mehr aktiv ist, kann ich auf bestimmte Seiten zugreifen.

    PHP-Code:
    session_start():

    $member mysql_real_escape_string($_POST['login']);

    $_SESSION['member'] = $member;   
    $_SESSION['pass'] = mysql_real_escape_string($_POST['pass']);

    $_SESSION['id'] = $row[0]; 
    Da sind meine Sessions.
    Wenn ich die auf einer anderen Seite abfrage:
    PHP-Code:
    session_start();

    $id $_SESSION['id'];

    $select "SELECT Mitglied, Passwort FROM spmembers WHERE id = '$id' ";
    $query mysql_query($select) or die(mysql_error());

    while (
    $row mysql_fetch_array($query$connect))
    {
    $member $row[0];
    $pass $row[1];
    }
    if (
    $_SESSION['pass'] == $pass && $_SESSION['member'] == $member)
    {
    //blablub
    }
    else echo 
    'Ungueltige Session'
    Habe ich trotzdem Zugriff auf den inneren Teil.
    Ich habe den Browser vorher geschlossen!
     

  2. #2
    Avatar von Igäl
    Igäl Igäl ist offline Mitglied Brokat
    Registriert seit
    Aug 2007
    Ort
    Winterthur
    Beiträge
    280
    Sessions sind nicht zwangsweise geschlossen, wenn du den Browser zu machst. Um eine Session sicher zu beenden benutzt du am besten session_destroy().
     

  3. #3
    Acriss Acriss ist offline Mitglied Platin
    Registriert seit
    Jun 2007
    Ort
    Lingen (Niedersachsen, zZ in Istanbul)
    Beiträge
    685
    Hmm
    könnt ihr denn auf diese Seite?
    http://petersilies.pe.funpic.de/sp/Datenbank.php

    @Igäl:
    Wie soll ich denn mit session_destroy() arbeiten,
    wenn das ganze System auf Sessions beruht?

    Hmm
    ich erhalte folgende Meldung:

    Notice: Undefined index: id in line 13

    Notice: Undefined index: pass in line 23

    Notice: Undefined variable: pass in line 23

    Notice: Undefined index: member in line 23

    Notice: Undefined variable: member in line 23

    line 13:
    PHP-Code:
    $id $_SESSION['id']; 
    line 23:
    PHP-Code:
    if ($_SESSION['pass'] == $pass && $_SESSION['member'] == $member
    ALso langsam wird das echt blöd... -.-
     

  4. #4
    Avatar von Igäl
    Igäl Igäl ist offline Mitglied Brokat
    Registriert seit
    Aug 2007
    Ort
    Winterthur
    Beiträge
    280
    Ah ok tut mir leid. Da hab ich etwas falsch verstanden.

    Bei deinen beiden Codeschnipsel die du gepostet hast: Welches Snippet hast du wo?

    Kleine Anmerkung: Wenn dein Query nur 1 oder kein Datensatz zurück gibt, brauchst du keine while-Schleife...
     

  5. #5
    Acriss Acriss ist offline Mitglied Platin
    Registriert seit
    Jun 2007
    Ort
    Lingen (Niedersachsen, zZ in Istanbul)
    Beiträge
    685
    Snippet?
    Ich weiß net was du meinst, aber ich habe ein weiteres Problem:
    Anscheinend werden fast alle IFs ignoriert:
    Mein Code:

    PHP-Code:
    <?php
    if (isset($_POST['submit']) && !empty($_POST['login']) && !empty($_POST['pass']))
        {
        
    $member mysql_real_escape_string($_POST['login']);
        
    $_SESSION['pass'] = mysql_real_escape_string($_POST['pass']);


        
    $select "SELECT id, Mitglied, Passwort, frei FROM spmembers WHERE Mitglied LIKE '$member' ";
        
    $query mysql_query($select) or die(mysql_error());

             
    $_SESSION['member'] = $member;

        while (
    $row mysql_fetch_array($query$connect))
            {

                 
    $_SESSION['id'] = $row[0];

            
    $member $row[1];
            
    $pass $row[2];
                     
    $frei $row[3];

            global 
    $member;
            global 
    $pass;
                     global 
    $frei;
            }
        if (
    $_SESSION['member'] == $member && $_SESSION['pass'] == $pass && $frei == 0)
            {
            echo 
    'Willkommen '.$_SESSION['member'].', <br />';
            echo 
    '<b>Datenbank</b>';
            echo 
    '<br />';
            echo 
    '<a href="Datenbank.php">Eintrag hinzuf&uuml;gen</a>';
            echo 
    '<br />';
            echo 
    '<a href="dbsuche.php">Eintrag suchen</a>';
            echo 
    '<br />';
            echo 
    '<b>Tools</b>';
                     echo 
    '<br />';
                     echo 
    '<a href="rechner.php">Flottenpunkte berechnen</a>';
                     echo 
    '<br />';
            }
             else
                 {
                 echo 
    '<p class="fehler">Achtung: M&ouml;glicherweise war ihr Login und/oder Passwort nicht korrekt oder sie sind noch nicht freigeschaltet!</p>';
                 echo 
    '<br />';
                      echo 
    '<a href="">Nochmal</a>';
                 }
             }
    else
        {
             echo 
    '<form method="post">';
             echo 
    '<input type="text" name="login" value="Benutzername" onFocus="this.value=\'\'" /> ';
             echo 
    '<br />';
             echo 
    '<input type="password" name="pass" value="Password" onFocus="this.value=\'\'" /> ';
             echo 
    '<br />';
             echo 
    '<input type="submit" name="submit" />';
             echo 
    '</form>';
             }
    Ich kann alles bei Login/Passwort eingeben, es funktioniert immer!
    Auch bei 45uwfhjsd08 und ldjfle9a0ß
     

  6. #6
    Avatar von nero_85
    nero_85 nero_85 ist offline Mitglied Platin
    Registriert seit
    Jul 2005
    Ort
    Österreich
    Beiträge
    734
    Ich blick' da momentan gar nicht durch!

    1. Frage: Sind das Separate Dateien in denen die beiden Codes stehen?
    2. Wenn das eine Datei ist oder wenn du die erste Datei in die 2. Includest, warum startest du die Session 2-mal? session_start() am anfang der Hauptdatei dürfte genügen

    Auf jeden Fall:

    Im ersten Code hast du einen Doppelpunkt und keinen Strichpunkt nach dem Start der Session gemacht:

    PHP-Code:
    session_start(); 
    und nicht
    PHP-Code:
    session_start(): 
    Dann woher nimmst du im ersten Code das Array $row ?

    Und im 2. Code hast du einen Fehler in der While-Schleife (die Keys im Array stimmen nicht)

    statt dem hier:

    PHP-Code:
    $member $row[0]; 
    $pass $row[1]; 
    muss dass hier hin:

    PHP-Code:
    $member $row['Mitglied']; 
    $pass $row['Passwort']; 
     
    Als Hirte erlaube mir, zu dienen mein Vater dir. Deine Macht reichst du uns durch deine Hand, diese verbindet uns wie ein heiliges Band! Wir waten durch ein Meer von Blut, gib uns dafür Kraft und Mut. In nomine partris et filii et spiritu sancti...

    KLICK HIER ;)

    Tokio-Hotel's "Durch den Monsun" mal anders.

    (\_/)
    (O.o) This is Bunny. Copy Bunny into your signature
    (> <) to help him on his way to world domination.

  7. #7
    Acriss Acriss ist offline Mitglied Platin
    Registriert seit
    Jun 2007
    Ort
    Lingen (Niedersachsen, zZ in Istanbul)
    Beiträge
    685
    Hmm
    also das $row
    nehm ich aus der while Schleife
    Außerdem habe ich nun eine Lösung für das Problem:
    Session und Variable dürfen nicht gleich sein,
    ich habe $member $members genannt, und $pass $passw und jetzt funktionierts
     

  8. #8
    Avatar von Igäl
    Igäl Igäl ist offline Mitglied Brokat
    Registriert seit
    Aug 2007
    Ort
    Winterthur
    Beiträge
    280
    Zitat Zitat von nero_85 Beitrag anzeigen
    Und im 2. Code hast du einen Fehler in der While-Schleife (die Keys im Array stimmen nicht)

    statt dem hier:

    PHP-Code:
    $member $row[0]; 
    $pass $row[1]; 
    muss dass hier hin:

    PHP-Code:
    $member $row['Mitglied']; 
    $pass $row['Passwort']; 
    Afaik kann man auf die Werte die mit mysql_fetch_array geholt werden sowohl wie auf ein assoziatives als auch wie auf ein nummerisches Array zugreifen. Von dem her ist seine Lösung korrekt, deine aber sicherlich übersichtlicher und auch die von mir präferierte.

    Ich würde den Query anpassen:
    PHP-Code:
        $select "SELECT id, Mitglied, Passwort, frei FROM spmembers WHERE Mitglied='".$member."' "
    Denn du möchtest ja das Mitglied suchen, dass sich eingeloggt hat. LIKE eignet sich eher für Volltextsuchen.

    Dann Frage: Was machst du mit global $member; etc.? Mir erschliesst sich der Sinn nicht.

    Hast du mal in einem Echo $_SESSION['member'] und $member nebeneinander ausgegeben?

    Ist es vielleicht möglich, dass du register_globals auf on hast und sich die Variablen überschreiben?
     

  9. #9
    Acriss Acriss ist offline Mitglied Platin
    Registriert seit
    Jun 2007
    Ort
    Lingen (Niedersachsen, zZ in Istanbul)
    Beiträge
    685
    http://petersilies.pe.funpic.de/sp/Datenbank.php

    Seht ihr da ein Suchfeld?

    @Igäl:
    Ich weiß es nicht,
    Aber wenn ich die umbenenne,
    siehe Posts über dir,
    funktioniert alles
     

  10. #10
    Avatar von nero_85
    nero_85 nero_85 ist offline Mitglied Platin
    Registriert seit
    Jul 2005
    Ort
    Österreich
    Beiträge
    734
    @Igäl:
    Das hab' ich nicht gewusst, aber danke! Mann lernt bekanntlich nicht aus

    @Acriss
    Ich sehe da die Fehlermeldungen die du vorhin geschrieben hast und Zwei Textfelder (Alianz-Tag und Spieler) sowie ein Button (Anfrage Senden)!
     
    Als Hirte erlaube mir, zu dienen mein Vater dir. Deine Macht reichst du uns durch deine Hand, diese verbindet uns wie ein heiliges Band! Wir waten durch ein Meer von Blut, gib uns dafür Kraft und Mut. In nomine partris et filii et spiritu sancti...

    KLICK HIER ;)

    Tokio-Hotel's "Durch den Monsun" mal anders.

    (\_/)
    (O.o) This is Bunny. Copy Bunny into your signature
    (> <) to help him on his way to world domination.

  11. #11
    Acriss Acriss ist offline Mitglied Platin
    Registriert seit
    Jun 2007
    Ort
    Lingen (Niedersachsen, zZ in Istanbul)
    Beiträge
    685
    Verdammt.Eigentlich geht das doch gar nicht

    Anscheinend ist eine richtige Session abgespeichert, und erst nach einem falschen Login, wird die anders abgespeichert, also falsch.
    Wie umgehe ich das Problem?
     

  12. #12
    Acriss Acriss ist offline Mitglied Platin
    Registriert seit
    Jun 2007
    Ort
    Lingen (Niedersachsen, zZ in Istanbul)
    Beiträge
    685
    Och lasse das Auch von anderen Testen,
    und anscheinend haben sie imemr Zugriff, auch wenn sie nicht eingeloggt sind.
    Sie sind noch nicht einmal registriert!
     

  13. #13
    Avatar von nero_85
    nero_85 nero_85 ist offline Mitglied Platin
    Registriert seit
    Jul 2005
    Ort
    Österreich
    Beiträge
    734
    Also an deiner Stelle würde ich ganz neu anfangen. Das ganze ist gottseidank nicht so viel!

    Zuerst würde ich schauen ob was in der Session steht, dann die Daten in Variablen schreiben. Danach würde ich überprüfen ob das Formular geschickt wurde, und die Daten aus dem Form in die Vars schreiben. Dann würde ich die Vars in der DB überprüfen, ob sie gültig sind. Wenn ja dann die Ausgabe des internen Bereichs ansonsten die Ausgabe der Loginseite

    PHP-Code:
    session_start();

    //Überprüfung der Session
    if(isset($_SESSION['member']) && !empty($_SESSION['member']) && isset($_SESSION['pass']) && !empty($_SESSION['pass'])){
        
    $var_member=$_SESSION['member'];
        
    $var_pass=$_SESSION['pass'];
    }

    //Überprüfung der Formulareingaben
    if(isset($_POST['submit']) && !empty($_POST['name']) && !empty($_POST['password'])){

        
    $var_member=mysql_real_escape_string($_POST['name']);
        
    $var_pass=mysql_real_escape_string($_POST['password']);

    }

    //MySQL-Abfrage starten
    $sql=mysql_query("SELECT id,Mitglied,Passwort,frei FROM spmembers WHERE Mitglied='".$var_member."' AND Passwort='".$var_pass."'") or die(mysql_error());

    //Ergebnisse der MySQL-Abfrage zählen
    $cnt_query=mysql_num_rows($sql);

    //Abfrage überprüfen und entsprechendes ausgeben
    if($cnt_query == 1){

        
    //SQL-Ergebnisse in ein Array schreiben
        
    $result=mysql_fetch_array($sql);
        echo 
    "Sie sind eingeloggt, ".$result['Mitglied'];
        
    $_SESSION['member']=$result['Mitglied'];
        
    $_SESSION['pass']=$result['Passwort'];
        
    //Oder was du sonst im internen Bereich haben willst

    }elseif($cnt_query == 0){ 

        
    //Hier kannst du dann die Loginseite einfügen.

    }else{
        
    //Sollten mehr als 1 ergebnis sein oder der inhalt von $cnt_query anders als 1 oder 0 sein, wird diese Meldung ausgegeben:
        
    echo "Ein unbekannter Fehler ist aufgetreten";


    Der Nachteil an diesem Script ist:
    Ich habs gerad erst geschrieben und daher noch nicht ausprobiert und
    Es wird JEDES mal ein SQL-Query gemacht, wenn die Seite aufgerufen wird. Aber das kannst du ja selber umbauen wenn du nicht willst dass die SQL-Anfrage immer wieder durchäuft.
    Geändert von nero_85 (28.08.07 um 12:45 Uhr) Grund: Ergänzung + Fehler im Code korriegiert
     
    Als Hirte erlaube mir, zu dienen mein Vater dir. Deine Macht reichst du uns durch deine Hand, diese verbindet uns wie ein heiliges Band! Wir waten durch ein Meer von Blut, gib uns dafür Kraft und Mut. In nomine partris et filii et spiritu sancti...

    KLICK HIER ;)

    Tokio-Hotel's "Durch den Monsun" mal anders.

    (\_/)
    (O.o) This is Bunny. Copy Bunny into your signature
    (> <) to help him on his way to world domination.

  14. #14
    Avatar von Igäl
    Igäl Igäl ist offline Mitglied Brokat
    Registriert seit
    Aug 2007
    Ort
    Winterthur
    Beiträge
    280
    PHP-Code:
    <?php
    phpinfo
    ();
    ?>
    Mach mal ein solches File und ruf es auf. Dann such, ob register_globals auf on oder off ist. Sofern es auf on ist, ist klar, warum deine Variablen überschrieben werden. Am besten setzt du es sowieso auf off. Warum ist hier nachzulesen: http://de.php.net/manual/de/security.globals.php

    @nero: Ja leider. Man hat immer was zu lernen
     

  15. #15
    Acriss Acriss ist offline Mitglied Platin
    Registriert seit
    Jun 2007
    Ort
    Lingen (Niedersachsen, zZ in Istanbul)
    Beiträge
    685
    Ich habe jetzt, wie nero es geraten hat, zuerst überprüft, ob die SESSION existiert.
    Wäre nocheinmal jemand so freundlich,und guckt ob er Zugriff hat?
    http://petersilies.funpic.de/sp/Datenbank.php

    mfg

    @Igäl:
    Ich kann es nicht an oder aus stellen,
    der Server gehört nicht mir (funpic)
     

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 11.01.11, 21:40
  2. Antworten: 4
    Letzter Beitrag: 22.03.06, 20:50
  3. Antworten: 0
    Letzter Beitrag: 06.10.04, 14:03
  4. PROBLEM! Pinnacle 2 GB Begrenzung Windows 2000 DC 50 PROBLEM!
    Von hennym im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 6
    Letzter Beitrag: 17.09.03, 22:09
  5. Antworten: 6
    Letzter Beitrag: 13.06.02, 12:29