Ankündigung

Einklappen
Keine Ankündigung bisher.

Geheime Seite Prüfung ob Nutzer eingeloggt ist...

Einklappen

Neue Werbung 2019

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

  • #16
    Zitat von jspit Beitrag anzeigen
    Mein Eindruck ist, ohne dass ich den Code jetzt von Beginn an verfolgt habe, das du dich in eine Sackgasse manövriert hast. Und was ich nie verstanden habe, warum bei solchen Problemen es immer wieder versucht wird das mit Weiterleitungen per header-location zu lösen. Es werden nicht x Skripte benötigt, sondern nur eines, wenn man sich das Standardverfahren "Affenformular" zu nutze macht.

    Ich habe mal auf die Schnelle ein lauffähiges Skript mit Login/Logout nur für das Verständnis der Funktion eines solchen "Affenformulars" erstellt ohne auf die Validität von HTML zu achten.

    PHP-Code:
    session_start();
    $html "";
    if(isset(
    $_POST['pw'])){
    //login
    if($_POST['pw'] == "123"){
    $_SESSION['login'] = 1;
    }
    else {
    $html .= "<br>Passwort falsch!<br>";
    }
    }
    elseif(isset(
    $_POST['logout'])){
    $html .= "Erfolgreich ausgeloggt<br>";
    $_SESSION = [];
    }
    if(empty(
    $_SESSION['login'])){
    //noch kein Login erfolgt oder Logout
    $html .= '<br>
    <form method="POST">
    <label for="pw">Login:</label>
    <input name="pw" type="password">
    <button type="submit">Login</button>
    </form>
    '
    ;
    }
    else {
    $html .= "Ich bin eingeloggt(".($_SESSION['login']++).")<br>";
    $html .= '<form method="POST">
    <button name="logout" type="submit">Logout</button>
    <button name="weiter" type="submit">Weiter</button>
    </form>'
    ;
    }
    echo 
    $html
    Hoffe hilft etwas.

    Ich werde mir mal später den Link anschauen . Ich weiß nicht, was $html bewirkt, werde mich mal schlaumachen.
    Leider hilft im ersten Blick nicht wirklich, da das Login über eine Datenbank erfolgt und nicht offline ist. Wenn der Nutzer NICHT eingeloggt ist und versucht in die Main zu kommen, wird zum index.php zurück geleitet.
    Leider bleibt die Session für immer. Ich würde gerne nach eine gewissene Zeit, dass der Kunde neu einlogen muss. Leider funktioniert das limit des Session net...
    Wie lange bleibt die Session normal bzw. wie finde ich raus, wie lange die existieren? Ich konnte noch nach Stunden einfach drauf. Ich habe jetzt diese zwischenlösung gefunden, was eigentlich nicht so gut ist...:

    PHP-Code:
    <?php
    session_start
    ();

    error_reporting(E_ALL);
    ini_set('display_errors'1);





    if(!isset(
    $_SESSION["eingeloggt"])){

        
    header("Location: index.php");
        exit();


    }else{
        echo 
    "Herzlich Willkommen! " "<br>" "Dein Einloggcode ist: " $_SESSION["eingeloggt"];






        
    session_destroy();



    }



    require(
    "connection.php");


    ?>

    Kommentar


    • #17
      Zitat von AAK Beitrag anzeigen
      Ich habe das jetzt bei meinem Anbieter angestellt. Werden die Logs öffentlich angezeigt?
      Nein, das wäre ja Wahnsinn wenn solche internen Informationen für jeden zugänglich wären.

      Kommentar


      • #18
        Zitat von AAK Beitrag anzeigen
        Ich weiß nicht, was $html bewirkt, werde mich mal schlaumachen.
        $html ist eine ganz normale PHP-Variable (welche HTML als String speichert).

        Zitat von AAK Beitrag anzeigen
        Leider hilft im ersten Blick nicht wirklich, da das Login über eine Datenbank erfolgt und nicht offline ist. Wenn der Nutzer NICHT eingeloggt ist und versucht in die Main zu kommen, wird zum index.php zurück geleitet.
        Solange du mit x Skripten (main.php, ..) arbeitest must du in jedes Skript welches nur "eingeloggt" besucht werden darf eine Prüfung über die Session einbauen. Sonst kann jeder der den Namen kennt deine main.php oder was sonst auch immer aufrufen. Und wenn du die Prüfung schon machen must, warum dann für das bisschen Login noch einen extra script? Wenn du das login gleich mit in deine main.php einbaust bist du fast beim Affenformular.

        Mein Beispiel ist nur für das Verständnis der Funktionsweise für eben dieses Standardverfahren gedacht.

        Zudem hoffe ich, das du deine Entwicklung nicht auf einen (externen) Produktivserver machst sondern lokal auf einem Entwicklungssystem. Dort sollte deine Applikation weitgehend ausgetestet sein bevor sie auf einen öffentlichen Server geschoben wird.

        Kommentar


        • #19
          Zitat von jspit Beitrag anzeigen

          $html ist eine ganz normale PHP-Variable (welche HTML als String speichert).



          Solange du mit x Skripten (main.php, ..) arbeitest must du in jedes Skript welches nur "eingeloggt" besucht werden darf eine Prüfung über die Session einbauen. Sonst kann jeder der den Namen kennt deine main.php oder was sonst auch immer aufrufen. Und wenn du die Prüfung schon machen must, warum dann für das bisschen Login noch einen extra script? Wenn du das login gleich mit in deine main.php einbaust bist du fast beim Affenformular.

          Mein Beispiel ist nur für das Verständnis der Funktionsweise für eben dieses Standardverfahren gedacht.

          Zudem hoffe ich, das du deine Entwicklung nicht auf einen (externen) Produktivserver machst sondern lokal auf einem Entwicklungssystem. Dort sollte deine Applikation weitgehend ausgetestet sein bevor sie auf einen öffentlichen Server geschoben wird.
          Ich mache es immer sofort öffentlich, da es ein unterschied macht, ob es local ist oder auf einen Server. Weil ein Server mansche bereiche nicht existieren.
          Ich überprüfe ja gleich am anfang, ob die Session eingeloggt existiert. Wenn nicht geht es zurück. Problem ist, dass die Session nach einer bestimmten Zeit nicht automatisch gelöscht wird. Und wenn man die Seite neu lädt ist man immer noch drinnen. Auch wenn man einmal eingeloggt WAR, ist man immer noch leider verbuden...

          Kommentar


          • #20
            Zitat von AAK Beitrag anzeigen
            Ich mache es immer sofort öffentlich, da es ein unterschied macht, ob es local ist oder auf einen Server. Weil ein Server mansche bereiche nicht existieren.
            Das ist auch ein großes Sicherheitsrisiko mangelhafte Skripte auf öffentlichen Servern laufen zu lassen.

            Zitat von AAK Beitrag anzeigen
            Weil ein Server mansche bereiche nicht existieren.
            Wenn auf deinen Server wichtige Komponenten fehlen solltest du den Webhoster wechseln. Zudem richte ich meine Entwicklungsumgebung so ein das diese maximal kompatibel zum Zielsystem ist.

            Zitat von AAK Beitrag anzeigen
            Problem ist, dass die Session nach einer bestimmten Zeit nicht automatisch gelöscht wird. Und wenn man die Seite neu lädt ist man immer noch drinnen. Auch wenn man einmal eingeloggt WAR, ist man immer noch leider verbuden...
            Doch, die Session wird in der Regel nach etwa 24 Minuten nach session_start() gelöscht. Wenn den Browser zu machst oder einen anderen benutzt must du dich auch immer neu anmelden. Das ist auch so beabsichtigt. Die Zeit zu verkürzen hast du selbst in der Hand. Für die meisten Anwendungen wird es jedoch als unschön empfunden wenn die Session aus heiteren Himmel einfach weg ist.




            Kommentar


            • #21
              Zitat von jspit Beitrag anzeigen

              Das ist auch ein großes Sicherheitsrisiko mangelhafte Skripte auf öffentlichen Servern laufen zu lassen.



              Wenn auf deinen Server wichtige Komponenten fehlen solltest du den Webhoster wechseln. Zudem richte ich meine Entwicklungsumgebung so ein das diese maximal kompatibel zum Zielsystem ist.



              Doch, die Session wird in der Regel nach etwa 24 Minuten nach session_start() gelöscht. Wenn den Browser zu machst oder einen anderen benutzt must du dich auch immer neu anmelden. Das ist auch so beabsichtigt. Die Zeit zu verkürzen hast du selbst in der Hand. Für die meisten Anwendungen wird es jedoch als unschön empfunden wenn die Session aus heiteren Himmel einfach weg ist.



              Leider ist die Session bisher noch nicht gelöcht. Ich habe da ein test script entwickelt, da muss ich die Seite aktuallisieren und dann wird eine Zeit angezeigt, wie lange die Session existiert. Meine aktuell über 3 Stunden.
              Leider ist ein festlege Zeit von Session bei mir nicht möglich.

              Das ich Script zur Prüfen, ob eine Session existiert:

              PHP-Code:
              <?php
              session_start
              ();
              $session_timeout 1800;
              $session_start time();
              $anfangzeit $_SESSION["starttime_session"];
              $session_existiert time() - $anfangzeit;
              $inmin $session_existiert 60;
              $instunden $inmin 60;

              session_cache_limiter(30);

              echo 
              session_cache_limiter(); //Ergebniss: nocache




              if(!isset($_SESSION["starttime_session"])){

                  
              $_SESSION["starttime_session"] = $session_start;

              }



              error_reporting(E_ALL);
              ini_set('display_errors'1);




              if(!isset(
              $_SESSION["eingeloggt"])){

                  
              header("Location: index.php");
                  exit();


              }else{
                  echo 
              "Herzlich Willkommen! " "<br>" "Dein Einloggcode ist: " $_SESSION["eingeloggt"];




                  echo 
              $_SESSION["eingeloggt"] . "<br>" "<br>" "<br>";

                 echo 
              "Session existiert seit: " $session_existiert "<br>" "<br>" "<br>";
                 echo 
              "Zeit in Minuten: " $inmin " und in Stunden: " $instunden;


                 
              //session_destroy();



              }



              require(
              "connection.php");


              ?>
              Aktuelle Zeit: 12681 = 211.35 Minuten = 3.5225 Stunden

              sollte eine neue Session ja irgendwie erstellt wurden sein, dann würde es ja wieder von 0 anfangen und nicht unendlich weiterlaufen...

              Kommentar


              • #22
                Sessions werden mit den Standardeinstellungen nicht zuverlässig zu einen bestimmten Zeitpunkt gelöscht. Im PHP-Manual wird deshalb auch empfohlen dies selbst über einen Zeitstempel zu realisieren sofern das notwendig erscheint. Nur wieder für das Verständnis hier mein kleines Testskript für die Entwicklungsumgebung.

                PHP-Code:
                <?php
                ini_set
                ('session.gc_probability','1');
                ini_set('session.gc_divisor','1');
                ini_set('session.gc_maxlifetime''10');
                session_start();
                echo 
                '<pre>';
                var_dump('$_SESSION at '.date('H:i:s'),$_SESSION);
                if(!isset(
                $_SESSION['time'])) {
                    
                $_SESSION['time'] = date('y-m-d H:i:s');
                }
                Die Einstellungen sind so gewählt, das nach jeden session_start() geprüft wird ob die Session abgelaufen ist. Zeit hier 10 Sek. Diese Einstellungen sollten auf keinen Fall in der Praxis genutzt werden, die sind hier nur für den Test !
                Beim Erststart sollte ein leeres Array gezeigt werdem, ab dem 2.Aufruf so etwas:
                PHP-Code:
                string(21"$_SESSION at 08:36:46"
                array(1) {
                  [
                "time"]=>   string(17"21-12-02 08:36:28"

                Wenn innerhalb von 10 Sekunden aktualisiert wird verlängert sich die Session immer wieder um 10 Sekunden. Wird länger als 10 sekunden gewartet dann erscheint nochmal das Array wie oben, erst beim Aufruf darauf sehen wir ein leeres Array.

                PHP-Code:
                string(21"$_SESSION at 08:40:06"
                array(0) {

                Noch ein Hinweis:
                Testskripte sollten für jeden nachvollziehbar sein und nur das enthalten was für den Test unbedingt notwendig ist. Ich erstelle solche Schnipsel immer separat und modifiziere nicht meine Anwendung zu Testzwecken. Was anderes ist wenn ich Debugging betreibe um Fehler in meiner Anwendung zu finden.

                Kommentar


                • #23
                  Zitat von jspit Beitrag anzeigen
                  Sessions werden mit den Standardeinstellungen nicht zuverlässig zu einen bestimmten Zeitpunkt gelöscht. Im PHP-Manual wird deshalb auch empfohlen dies selbst über einen Zeitstempel zu realisieren sofern das notwendig erscheint. Nur wieder für das Verständnis hier mein kleines Testskript für die Entwicklungsumgebung.

                  PHP-Code:
                  <?php
                  ini_set
                  ('session.gc_probability','1');
                  ini_set('session.gc_divisor','1');
                  ini_set('session.gc_maxlifetime''10');
                  session_start();
                  echo 
                  '<pre>';
                  var_dump('$_SESSION at '.date('H:i:s'),$_SESSION);
                  if(!isset(
                  $_SESSION['time'])) {
                  $_SESSION['time'] = date('y-m-d H:i:s');
                  }
                  Die Einstellungen sind so gewählt, das nach jeden session_start() geprüft wird ob die Session abgelaufen ist. Zeit hier 10 Sek. Diese Einstellungen sollten auf keinen Fall in der Praxis genutzt werden, die sind hier nur für den Test !
                  Beim Erststart sollte ein leeres Array gezeigt werdem, ab dem 2.Aufruf so etwas:
                  PHP-Code:
                  string(21"$_SESSION at 08:36:46"
                  array(1) {
                  [
                  "time"]=> string(17"21-12-02 08:36:28"

                  Wenn innerhalb von 10 Sekunden aktualisiert wird verlängert sich die Session immer wieder um 10 Sekunden. Wird länger als 10 sekunden gewartet dann erscheint nochmal das Array wie oben, erst beim Aufruf darauf sehen wir ein leeres Array.

                  PHP-Code:
                  string(21"$_SESSION at 08:40:06"
                  array(0) {

                  Noch ein Hinweis:
                  Testskripte sollten für jeden nachvollziehbar sein und nur das enthalten was für den Test unbedingt notwendig ist. Ich erstelle solche Schnipsel immer separat und modifiziere nicht meine Anwendung zu Testzwecken. Was anderes ist wenn ich Debugging betreibe um Fehler in meiner Anwendung zu finden.
                  kann die Seite nach ablauf automatisch aktualisieren und somit wieder zum Login gebracht wird, wenn der Nutzer inaktiv war? Aus Sicherheitgründe würde ich es dann auf ca. 15minuten stellen wollen...

                  Ich werde sehen, ob das in mein Scriyp funktioniert. KP warum die eine Session_cache_limit(20; oft erwähnt wird, was mir nur errors anzeigt...

                  Kommentar


                  • #24
                    Wie schon gesagt, die Session auf Basis von GC (Garbage Collection) ablaufen zu lassen ist unsicher. Da helfen auch keine Tricks wie die Seite automatisch aktualisieren zu lassen. Außerdem täuscht du damit eine Nutzeraktivität vor.
                    Mache es selbst. Vom Grundsatz:
                    PHP-Code:
                    $_SESSION['login'] = time(); 
                    nach dem erfolgreichen Einloggen und jeden (gültigen) Request zum verlängern. Wenn
                    PHP-Code:
                    time() > $_SESSION['login'] + $session_max_time 
                    machst du ein Logout.
                    PHP-Code:
                    $_SESSION = []; 
                    $session_max_time enthält die Zeit in Sekunden. Habe das in einer Demo für meine Templateklasse drin, funktioniert zuverlässig.

                    Kommentar

                    Lädt...
                    X