Ankündigung

Einklappen
Keine Ankündigung bisher.

Denkfehler => Session Controll

Einklappen

Neue Werbung 2019

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

  • Denkfehler => Session Controll

    Hi,

    der Admin kann bestimmen, wie lange eine Session gültig ist, dass wird dann in einer DB gespeichert.
    Jetzt wollte ich mit folgenden Script folgendes erreichen:

    PHP-Code:
    <?php
    error_reporting
    (E_ALL);

    //SESSION CONTROLL

    //wenn es eine User id gibt den die Session löschen, wenn die Zeit abgelaufen ist

    if(isset($_SESSION['user_id']))
    {
    $user_info "SELECT login_time FROM board_user_login WHERE user_id = '".$_SESSION

    ['user_id']."'";
    $user_time = new mysql($user_info);

    $result_user_time $user_time -> select($user_info);

    while(
    $user_time_out mysql_fetch_assoc($result_user_time))
    {
        
    $logout_time $session_time+$user_time_out['login_time'];    

        if(
    $user_time_out['login_time'] >= $logout_time)
        {
            
    session_unset();
        }
    }
    }

    //alle alten Einträge löschen

    $old_session "DELETE FROM board_user_login WHERE login_time >= '".$session_time."'";
    $delete_old_session = new mysql($old_session);

    $result_old_session $delete_old_session -> select($old_session);
    ?>
    Wenn man auf logout klick wird auch der Eintrag in der DB gelöscht.
    Doch irgendwie klappt das alles nicht so wirklich.
    Der Admin gibt die Zeit übrigns in Sekunden an.

    Wo habe ich meinen Denkfehler gemacht?

  • #2
    Irgendwie komme ich nicht ganz mit der Logik deiner Unset Bedingung klar. Könnte es sein, dass hier der Fehler liegt?

    if($user_time_out['login_time'] >= $logout_time)
    {
    session_unset();
    }

    $user_time_out['login_time'] ist der Zeitpunkt an dem der User sich eingeloggt hat? Und ab da bleibt die Angabe unverändert bis zum nächsten Login?

    $logout_time ist bei dir die gleiche Zeit + einen Wert den der Admin angibt. Passt von der Logik nicht, da dieser Wert immer größer wie der andere ist, weil du vergleichst: Loginzeit >= Sessiondauer + Loginzeit. Deshalb gibts auch nie einen Logout.

    Du müsstest doch irgendwo noch die aktuelle Zeit unterbringen...

    Also wenn: Loginzeit+Session_dauer <= AktuelleZeit dann logge aus.

    Kommentar


    • #3
      session_start() ist aber aktiviert ?

      Kommentar


      • #4
        Habe es jetzt wie folgt versuch:

        PHP-Code:
        <?php
        error_reporting
        (E_ALL);

        //SESSION CONTROLL

        if(isset($_SESSION['user_id']))
        {

        $date time();

        $user_info "SELECT login_time FROM board_user_login WHERE user_id = '".$_SESSION

        ['user_id']."'";
        $user_time = new mysql($user_info);

        $result_user_time $user_time -> select($user_info);

        while(
        $user_time_out mysql_fetch_assoc($result_user_time))
        {
            
        $logout_time $session_time+$user_time_out['login_time'];    

            if(
        $date >= $logout_time)
            {
                
        session_unset();
                
        session_destroy ();

                echo 
        '<meta http-equiv="refresh" content="0; URL=index.php">';
            }
        }
        }

        $old_session "DELETE FROM board_user_login WHERE login_time >= '".$session_time."'";
        $delete_old_session = new mysql($old_session);

        $result_old_session $delete_old_session -> select($old_session);
        ?>
        Trotzdem bleibt die Session bestehen und logt mich nicht aus.
        Obwohl die $session_time eigentlich nur eine Sekunde ist.
        Ich verstehe die Welt nicht mehr.
        Achja und session_start(); ist in der Index.php gesetzt wo diese Datei ^^ includet wird.

        Kommentar


        • #5
          "Du hast keinen Schimmer, was wirklich passiert, benutzt keinen Debugger und es fehlen die Behandlung für else-Fälle". Damit schicke ich Mitarbeiter normalerweise sofort wieder aus meinem Büro.
          Also, bitte allermindestens
          PHP-Code:
          <?php
          if(isset($_SESSION['user_id']))
          {
          ...
              if(
          $date >= $logout_time)
              {
              ...
              }
              else
              {
                  echo 
          __FILLE__,'@'__LINE__,": $logout_time = $session_time+$user_time_out[login_time]  => if($date >= $logout_time) false
          "
          ;
              }
            }
          }
          else
          {
            echo 
          __FILLE__,'@'__LINE__,': $_SESSION[user_id] nicht gesetzt
          <pre>'
          ;
            
          print_r($_SESSION);
            echo 
          '</pre>';
          }
          ?>
          und dann mal schauen.

          Kommentar


          • #6
            Sorry, ich habe nie richtig gelernt zu Debuggen.

            Das ist die Ausgabe:

            Code:
            Notice: Use of undefined constant __FILLE__ - assumed '__FILLE__' in /home/webpages/lima-city/newwarrior/html/juca/session_controll.php on line 28
            __FILLE__@28: 1175195711 = 1+1175195710 => if(1175195710 >= 1175195711) false

            Kommentar


            • #7
              Zeigt zwei Dinge
              1. wir schreiben beide gerne ein L zuviel. __FILE__ statt __FILLE__, control statt controll.
              2. die Bedingung if($date >= $logout_time) wird nicht erfüllt und deshalb wird die Session nicht beendet.
                Ich hab zwar auch eine Idee, wie das passieren kann, aber vielleicht schaust Du Dir besser nochmal selbst den Ablauf an, bevor ich wild rumrate.

              Kommentar


              • #8
                Also ich kann den Hacken nicht finden.
                Liegt vielleicht daran, dass ich die letzten zwei Tage nichts anderes gemacht habe als Fehler auszubessern und meinen Code sauberer zu schreiben.
                Sorry, könntest du mir nur einen Tipp geben ?
                Danke

                Kommentar


                • #9
                  echo __FILE__,'@', __LINE__,": $logout_time = $session_time+$user_time_out[login_time] => if($date >= $logout_time) false
                  ";
                  1175195711 = 1+1175195710 => if(1175195710 >= 1175195711) false
                  sprich: $user_time_out[login_time] == $date == time()
                  Wenn das jedes Mal so ist, solltest Du Dir nochmal genau ansehen, wann und wie login_time in der Tabelle board_user_login aktualisiert wird.

                  Kommentar

                  Lädt...
                  X