Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Login-Timestamp in DB eintragen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Login-Timestamp in DB eintragen

    Hallo Kollegen,

    ich möchte eingeloggte User anzeigen.
    Dazu würde ich gerne nach dem Login einen timestamp in die DB schreiben lassen, habe eine Spalte "last_action" angelegt und sie mit "timestamp" formatiert.
    Ich benutze leider noch PHP 4.4.9.
    Nun möchte ich, dass nach dem Login automatisch ein timestamp eingetragen wird.
    PHP-Code:
    $FF_login_failed false;
    $BnNr=$row_FF_rsUser['BnNr']; //holt die jeweilige Benutzernummer
    $last_action date('Y-m-d H:i:s');
    $updateSQL sprintf("UPDATE Benutzer SET last_action='$last_action' WHERE BnNr='$BnNr'");
    mysql_select_db($database_connect$connect);
    $Result1 mysql_query($updateSQL$connect) or die(mysql_error());    
    header ("Location: $FF_redirectLoginSuccess");
    exit; 
    Das klappt alles ganz wunderbar. Nun weiss ich aber nicht weiter, wie ich diesen timestamp bei Useraktionen updaten lassen kann (am besten, bei jedem Klick auf einen Link o.ä., aber das ist wohl etwas utopisch).

    Zweiter Teil meiner Frage (und leider etwas off-topic, aber es gehört zu meinem Vorhaben dazu): Ich beende die Sessions von inaktiven Benutzern wie folgt
    PHP-Code:
    ...
    session_cache_limiter('private');
    $cache_limiter session_cache_limiter();
    session_cache_expire(10);
    $cache_expire session_cache_expire();
    session_start();
    ... 
    Ist das die richtige Vorgehensweise, oder gibt es dabei eventuell noch etwas zu beachten?

  • #2
    zum oberen teil:

    was ist dann genau die frage wenns funktioniert? (habe mir den code nu nicht angesehen) du kannst jede benutzer-aktion nur dann updaten, wenn ein request erfolgt.

    zum anderen:

    dort wird doch garkeine session beendet


    session_cache_expire() gibt die aktuelle Einstellung von session.cache_expire zurück
    session_cache_limiter() gibt die Bezeichnung der aktuellen Cacheverwaltung zurück.
    session_start() startet eine session...

    Kommentar


    • #3
      Zum ersten Teil: also müsste ich theoretisch bei jeder Abfrage auch gleichzeitig ein Update des Timestamp in der Benutzertabelle machen, also quasi "per Hand" in den Code einfügen? Ich hatte gehofft, dass es eineFunktion gibt, die das automatisch übernehmen könnte....

      Zum zweiten Teil:
      Hm ja, aber mittels
      PHP-Code:
      session_cache_expire(10);
      $cache_expire session_cache_expire(); 
      setze ich doch das Limit (nämlich auf 10 Minuten).
      (Oder nicht??)

      Kommentar


      • #4
        1) du machst beim login doch GENAU dasselbe.. also einfach in die datei packen, die ebenfalls bei jedem aufruf deiner seite ausgeführt wird.

        2) session_cache_expire beendet jedoch keine session sondern MUSS vor session_start(); also beginn einer session stehen, d.h. dann wird die session gelöscht/beendet.., aber wenn du einen logout planst (also der user soll auf einen link klicken um sich auszuloggen), dann hat der codeschnippsel jedoch nichts mit einem logout zutun.


        [MAN]session_destroy[/MAN]
        [MAN]session_unset[/MAN]
        [MAN]session_cache_expire[/MAN]
        [MAN]session_cache_limiter[/MAN]

        lies nochmal genau nach!


        edit: huch sry, hab aber das wort "inaktiv" überlesen.. ja da hast du recht *g* - ich geh lieber ins bett

        Kommentar


        • #5
          zu1) jetzt verstehe ich grade nicht, was genau du meinst mit
          also einfach in die datei packen, die ebenfalls bei jedem aufruf deiner seite ausgeführt wird
          Meinst du etwa die index.php, von wo aus der Rest included ist? Dort einfach an den Anfang ein UPDATE setzen, welches bei jedem Aufruf neu ausgeführt wird?

          zu2) naja, es gibt einen "richtigen" Logout-Weg, mittels eines Links, aber falls ein User 10 Minuten inaktiv ist, soll die Session und somit seine Authorisierung für die Seite verfallen, sodass er sich nach 10 Minuten Inaktivität wieder neu einloggen müsste.

          Kommentar


          • #6
            1) natürlich da wo es innerhalb deiner appliaktion hingehört (diese kenne ich ja nicht, und ob die index.php deine bootstrap datei ist weiss ich auch nicht, also das musst du entscheiden - aber die index.php ist dafür eigtl. nicht da) und wie gesagt das sql-update muss dann halt bei jedem request erfolgen.

            2) ok, sry wie gesagt habs gerade überlesen

            Kommentar


            • #7
              Danke für den Denkanstoß. Ich habe es nun lösen können.
              PHP-Code:
              $loggedUser=$_SESSION['MM_UserNumber'];
              $last_action=date('Y-m-d H:i:s');
              $updateSQL sprintf("UPDATE Benutzer SET last_action='$last_action' WHERE BnNr='$loggedUser'");
              mysql_select_db($database_connect$connect);
                        
              $Result1 mysql_query($updateSQL$connect) or die(mysql_error()); 
              Ich musste es allerdings doch in die index.php schreiben, da sie ja die Wurzel der Seite darstellt und als einzige Seite IMMER geladen wird, egal, auf welchen Link geklickt wird.
              Du kannst mir gerne noch deine Bedenken
              aber die index.php ist dafür eigtl. nicht da
              etwas genauer erklären, wenn du magst.
              Erstmal Danke und gute Nacht!

              Kommentar


              • #8
                Bedenken sind das keine, es liegt am Design der Software.
                Bei mir werden z.B. der Frontcontroller und seine Actions immer geladen, also könnte ich deine Maßnahme lieber in eine Action schreiben, die dann bei jedem Request ausgeführt wird.
                Meine index.php bindet nur den Frontcontroller ein, welcher dann alle Anweisungen weiterleitet.

                Kommentar


                • #9
                  ... SET last_action='$last_action' ...
                  Mysql stellt eine Funktion now() zur Verfügung, die den aktuellen Zeitstempel liefert. Du musst den also nicht von PHP berechnen lassen und dann importieren, sondern kannst schreiben:

                  Code:
                  SET last_action=now()
                  [PHP]if ($var != 0) {
                  $var = 0;
                  }[/PHP]

                  Kommentar

                  Lädt...
                  X