Ankündigung

Einklappen
Keine Ankündigung bisher.

sessions

Einklappen

Neue Werbung 2019

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

  • sessions

    hallo zusammen

    ich habe gemerkt, dass ich eine kleine wissenslücke habe, ich möchte einen einfachen login bereich programmieren (mit sessions usw.)

    doch wie mache ich, dass eine seite nur aufgerufen werden kann, wenn die session schon steht oder wie gesagt wenn der benutzer sich eingeloggt hat?

    cheers sascha


  • #2
    also das beste ist wohl beim login die ip in $_SESSIOB['ip'] zu speichern und dann bei jedem script abfragen
    Code:
    if($_SESSION['ip']!=$_SERVER['REMOTE_ADDR']){
    die("Verdammter Hacker");
    } else {
    das script....
    }
    am beste speicherst du das unter session.php oder so und includest das überall

    Kommentar


    • #3
      hallo,

      ok klingt gut, habe aber gleich noch eine andere frage entdeckt, ich möchte dass der benutzer wenn er das passwort richtig eingegeben hat automatisch auf die neue index seite weiter geleitet wird,
      aber wenn er das falsche pw eingibt soll das nicht geschehen wie mache ich das?

      Kommentar


      • #4
        du schaltest ein kontrollscript zwischen die eingabe und die auszuführende aktion ... und arbeitest mit header() ... schau im manual ..

        grüße ben
        privater Blog

        Kommentar


        • #5
          Code:
          <?php
          
          if($var == True) {
          script wenn pw richtig
          
          } else {
          header ("Location: index.php");
          }
          
          ?>
          würde ich sagen....

          Kommentar


          • #6
            hallo,

            ja aber ich möchte eigentlich eine zeitbedingte weiterleitung wenn das pw richtig ist versteht ihr...


            aber ich weiss nicht wie ich das machen kann viliecht mit einem meta refresh aber wie baue ich den in das php ein das er nur erscheint wenn das pw richtig ist?


            cheers sascha

            Kommentar


            • #7
              Ausnahmsweise etwas länger...:
              Zitat von sasch
              ja aber ich möchte eigentlich eine zeitbedingte weiterleitung wenn das pw richtig ist versteht ihr...
              Nein, weil das nicht geht bzw. nicht sicher ist.

              aber ich weiss nicht wie ich das machen kann viliecht mit einem meta refresh aber wie baue ich den in das php ein das er nur erscheint wenn das pw richtig ist?
              Ein gewiefter User guckt im HTML Dokument nach, kopiert sich den Link und Dein "schöner" Paßwortschutz ist für die Katz.

              27.2. Von HTML zu PHP: Schreibe Formularverarbeitungen in Normalform
              http://www.dclp-faq.de/q/q-stil-normalform.html

              "Der erste Schritt ist die Entwicklung eines reinen HTML-Formulares, das die zu verarbeitenden Daten abfrägt.

              In einem zweiten Schritt wird man aus diesem Formular ein sogenanntes Affenformular machen, indem man dafür sorgt, dass das Formular sich selbst aufruft und seine alten Werte immer wieder einsetzt. Es heißt Affenformular, weil eine Million Affen dieses Formular eine Million mal aufrufen können, ohne etwas zu bewirken. [wenn die Eingaben falsch oder unvollständig sind]

              Der dritte Schritt besteht dann darin, eine Reihe von Funktionen zu codieren, die die Werte aus diesem Formular validieren (siehe Wie erkenne ich fehlerhafte/fehlende Eingaben?) und ggf. die passenden Fehlermeldungen erzeugen, die dann an den geeigneten Stellen wieder in das Formular eingesetzt werden. Das Endresultat muss dann eine Variable haben, an der entscheidbar ist, ob der Formularinhalt gültig ist oder nicht."

              Im Endeffekt muß, wenn der Login gültig ist, eine Session angelegt werden, in der eine Variable angelegt wird, die den Loginstatus beinhaltet.
              zB.: $_SESSION['login'] = true;

              Diese Variable muß bei jedem weiteren Request ebenfalls abgefragt werden. Ist die Variable !== true, muß ein redirect auf das Loginformular erfolgen.

              Kommentar


              • #8
                Code:
                <?php
                if($_POST['$user']){
                $user=$_POST['user'];
                $db=mysql_connect("xxxxx","xxxx","xxxx") or die ("Verbindung fehlgeschlagen");
                mysql_select_db("xxxxxx",$db);
                $user_SQL="SELECT * FROM user WHERE user_ID=$user";
                $user_result=mysql_query($user_SQL);
                $user_array=mysql_fetch_array($user_result);
                if($_POST['user_pw']==$user_array['user_pw']){
                session_start();
                $_SESSION['user']=$user;
                $_SESSION['ip']=$REMOTE_ADDR;
                $_SESSION['name']=$user_array['user_name'];
                $now=time();
                $last_login_SQL="UPDATE user SET user_last_login='$now' WHERE user_ID=$user";
                $last_login_SQL_result=mysql_query($last_login_SQL);
                header("Location: intern_index.php");
                } else {
                echo "Dass eingegebene Passwort für " . $user_array['user_name'] . " ist falsch!";
                } //endif - Passwortabfrage
                mysql_close();
                } else {
                echo "Sie sind nicht eingeloggt";
                } // endif - Loginabfrage
                ?>
                also so sieht mein loginscript aus...wenn du es zeitbedingt machen willst kannst du vor dem header() mit der funktion sleep() noch ne verzögerung einbauen aber was soll das bringen? user freuen sich doch wenn alles ohne verzögerung geht :wink:

                Kommentar


                • #9
                  hallo

                  danke für eure hilfe es läuft schon fast aber wie immer stecke ich wieder fest...

                  ich habe beim script welches das pw überprüft folgendes

                  Code:
                  if($row = mysql_fetch_array($benutzer))
                  	{
                  		
                  		
                  		$logged = 1;
                  		
                  		session_register($logged);
                  		session_register($nickname);
                  		session_register($ip);
                  		header("Location: login/index.php"); 
                  
                  		
                  	}
                  ....
                  natürlich habe ich das session_start schon im header aktiviert und die variable $ip definiert als remote adrr

                  ich möchte jetzt aber bei jedem script schauen ob scho eine session gsetzt wurde, also ob sich der benutzer eingeloggt hat dies mache ich so:

                  Code:
                  session_start();
                  $ip_s=$_SERVER['REMOTE_ADDR'];
                  
                  if($ip == $ip_s){
                  		 
                  script...
                  		}
                  	else {
                  	echo "nochmals einloggen";
                   	}
                  doch leider geht es nicht ich weiss nicht wieso eigentlich müssten diese variablen ja noch vorhanden sein oder? wo könnte das problem liegen? allenfalls bei php.ini?

                  register globals ist aber auf on!

                  ich hoffe ihr könnt mir helfen!

                  danke schon im voraus

                  sascha

                  Kommentar


                  • #10
                    Zitat von sasch
                    register globals ist aber auf on!
                    ich hoffe ihr könnt mir helfen!
                    Da muß ich passen. Welche Bocksprünge man alles machen muß, damit das Session Handling trotz register_globals = On "so wie üblich" funktioniert, habe ich schon seit 2 Jahren verlernt.

                    btw: gewöhne Dir wenigstens an, Deine Scripte funktional als Blöcke zusammenzufassen. Sonst sucht man sich 'nen Wolf...

                    1.
                    Code:
                    if($row = mysql_fetch_array($benutzer)) 
                       { 
                          $logged = 1; 
                           
                          session_register($logged); 
                          session_register($nickname); 
                          session_register($ip); 
                          header("Location: login/index.php"); 
                       }
                    SQL Abfrage ist unsicher und sinnfrei.
                    Location muß absolut sein
                    wenn Du den Client mit redirect wegschickst, solltest Du Du ihm wenigstens die Session_id mitgeben, wenn er keinen Keks wollte.

                    2.
                    Code:
                    session_start(); 
                    $ip_s=$_SERVER['REMOTE_ADDR']; 
                    if($ip == $ip_s){ 
                    
                       echo "nochmals einloggen";
                    29.15. Warum verwendet PHP nicht die IP-Nummer des Browsers als Schutz gegen eine Übernahme der Session?
                    http://www.dclp-faq.de/q/q-sessions-ip.html

                    Kommentar


                    • #11
                      Zitat von meikel
                      Location muß absolut sein
                      *schnüff* .. *hach* .. endlich mal jemand, der das ebenfalls anmerkt. Kam mir da immer etwas alleingelassen vor ^^

                      Kommentar


                      • #12
                        ok das mit der ip leuchtet ein habe es geändert aber es funzt immer noch nicht ich schicke ihm jetzt die sid mit aber ich habe die variabeln $logged immer noch nicht verfügbar, die sollte doch eigentlich global sein oder wnn ich sie in der session speichere wie oben mit register oder? wo könnte das problem liegen?

                        und was meinst du mit redirect?

                        cheer sasch

                        Kommentar


                        • #13
                          Zitat von sasch
                          ok das mit der ip leuchtet ein habe es geändert aber es funzt immer noch nicht ich schicke ihm jetzt die sid mit aber ich habe die variabeln $logged immer noch nicht verfügbar, die sollte doch eigentlich global sein oder wnn ich sie in der session speichere wie oben mit register oder? wo könnte das problem liegen?
                          1. gewöhne Dir schleunigst an, aussagekräftige Fehlermeldungen/-beschreibungen zu liefern. Was Du lieferst, rangiert unter "Blondinen-Deutsch".

                          2. sid ist uninteressant. Ich meinte oben die Konstante SID

                          3. session_register() ist seit PHP 4.1.0 out.
                          4. mit register_globals = On wirst Du keine große Freude haben

                          Ich könnte Dir ja ein Script liefern, welches funktioniert, aber ich verkneife mir das. a. weil es nur mit register_globals = Off läuft und b. weil ich Dir sonst noch Teile von Handbuch und FAQ vorlesen müßte.

                          und was meinst du mit redirect?
                          Manual und FAQ lesen ist wohl nicht Dein Ding?

                          27.9. Wie erzeuge ich mit PHP einen Redirect auf eine andere Seite?
                          http://www.dclp-faq.de/q/q-http-redirect.html

                          Kommentar


                          • #14
                            hallo

                            also ich versuche mich jetzt mal klar auszudrücken

                            wie kann ich eine variable in einer session speichern das mit ich sie nachher noch zur verfügung habe?

                            ich habe das so versucht:

                            Code:
                            <?php
                            
                            session_start();
                            $sid=session_id();
                            session_register($var);
                            $var=hallo;
                            
                            echo"zur nächsten seite :<a href=\"next.php?sid=$sid\">hier</a>";
                            
                            ?>
                            und dann bei der seite next.php habe ich folgendes
                            Code:
                            <?php
                            
                            session_start();
                            
                            echo"$var";
                            ?>
                            aber es geht nicht wo liegt den der fehler, ich hoffe dies war ausführlich genung geschilder auch für meikel!

                            danke sascha

                            Kommentar


                            • #15
                              a: 'sid' heisst die Session nciht .. PHPSESSID ist korrekt

                              b: $_SESSION['var'] = 'hallo'; ... reicht völlig .. kein session_register, $var gibt es allerdings dann NICHT (braucht auch kein Mensch!)

                              c: 'hallo' .. <- sie genau hin .. Quotes!

                              d: für echo"$var"; müsste deine Tastatur Elektroschocks verteilen ... einezelne Variablen werden nicht gequoted ...

                              e: Leerzeichen nach echo ... wo ich schonmal dabei bin ...

                              Kommentar

                              Lädt...
                              X