Contao-Camp 2024
Ergebnis 1 bis 29 von 29

Thema: gleichzeitiger Login über einen Account unterbinden

  1. #1
    Contao-Nutzer
    Registriert seit
    25.02.2010.
    Beiträge
    89

    Standard gleichzeitiger Login über einen Account unterbinden

    Hallo,

    gibt es eine Möglichkeit das man das doppelte nutzen eines Mitglieder Accounts unterbindet? Es soll verhindert werden das der Account zeitgleich an zwei Rechnern genutzt wird. Ist dies einstellbar?

    Danke im Vorraus

  2. #2
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Mit Boardmitteln oder per Erweiterung kenne ich da nichts. Du müsstest beim Einlogversuch in der DB.tl_member nachsehen, ob das Mitglied gerade eingeloggt ist.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  3. #3
    Contao-Nutzer Avatar von Sascha.Brandhoff
    Registriert seit
    05.01.2012.
    Ort
    Mittelhessen
    Beiträge
    187

    Standard

    Hi Andreas,

    mal rein aus interesse wird das den in der tl_member vermerkt ob der Nutzer aktuell angemeldet ist?

    Grüße

  4. #4
    Contao-Nutzer
    Registriert seit
    25.02.2010.
    Beiträge
    89

    Standard

    eigentlich dient einem hier nur die tl_session als hilfe, oder?

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.892
    Partner-ID
    10107

    Standard

    Ja, man könnte beim Login in der tl_session Tabelle überprüfen, ob der Benutzer (tl_session.id = ? AND name = 'BE_USER_AUTH') in, sagen wir mal, den letzten 60 Sekunden (tl_session.tstamp >= time() - 60) gerade aktiv war, wenn ja, dann wird der Login verweigert.

    // edit: Hinweis: dadurch alleine verhindert man aber immer noch nicht, dass jemand zwei mal eingelogged sein kann. Denn wenn Benutzer 1 eingelogged ist und 60 Sekunden lang nichts macht, kann sich Benutzer 2 mit dem selben Account einloggen und es können dann wiederum beide weiterarbeiten.
    Geändert von Spooky (08.06.2016 um 09:59 Uhr)

  6. #6
    Contao-Nutzer Avatar von Sascha.Brandhoff
    Registriert seit
    05.01.2012.
    Ort
    Mittelhessen
    Beiträge
    187

    Standard

    Hi Spooky,

    Zitat Zitat von Spooky Beitrag anzeigen
    edit: Hinweis: dadurch alleine verhindert man aber immer noch nicht, dass jemand zwei mal eingelogged sein kann. Denn wenn Benutzer 1 eingelogged ist und 60 Sekunden lang nichts macht, kann sich Benutzer 2 mit dem selben Account einloggen und es können dann wiederum beide weiterarbeiten.
    das könnte man ja ggf. einfach durch einen Ajax-Request auf Datei X lösen die einfach nur die Engine initalisiert und alle 50 Sek. ausgeführt wird.

    Grüße

  7. #7
    Contao-Nutzer
    Registriert seit
    25.02.2010.
    Beiträge
    89

    Standard

    Eigentlich hatte ich mir das eher so vorgestellt das die ältere Session immer gelöscht wird. Also für den Frontenduser wäre das dann ja in der tl_session die pid und name = 'FE_USER_AUTH'
    Gibt es dafür einen hook, den man nutzen kann, bevor hier ein neuer Eintrag erzeugt wird?

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.892
    Partner-ID
    10107

    Standard

    Zitat Zitat von cyklop Beitrag anzeigen
    Eigentlich hatte ich mir das eher so vorgestellt das die ältere Session immer gelöscht wird. Also für den Frontenduser wäre das dann ja in der tl_session die pid und name = 'FE_USER_AUTH'
    Gibt es dafür einen hook, den man nutzen kann, bevor hier ein neuer Eintrag erzeugt wird?
    Ich glaube mehrere Sessions pro User sind sowieso nie vorhanden, habe es aber nicht explizit getestet.

  9. #9
    Contao-Nutzer
    Registriert seit
    25.02.2010.
    Beiträge
    89

    Standard

    Doch, man kann sich mit dem gleichen Benutzer über einen anderen Browser oder einen anderen Rechner neu anmelden und parallel arbeiten. Das möchte ich eben unterbinden.

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.892
    Partner-ID
    10107

    Standard

    Zitat Zitat von cyklop Beitrag anzeigen
    Doch, man kann sich mit dem gleichen Benutzer über einen anderen Browser oder einen anderen Rechner neu anmelden und parallel arbeiten. Das möchte ich eben unterbinden.
    Ja, das ist schon klar, aber ich glaube es ist pro User immer nur eine Session in der Datenbank. Moment, ich teste das mal

  11. #11
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Gibt es dann auch zwei verschiedene Sessions für den User?
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.892
    Partner-ID
    10107

    Standard

    Doch nicht, ja dann kannst du es so machen und die ältere Session einfach löschen. Sollte dann perfekt funktionieren .

  13. #13
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Wieso die ältere Session einfach löschen? Damit wird doch immer der ausgeloggt, der mal "kurz" inaktiv ist..... ich glaube die Lösung von Sascha mit dem AJAX Request wäre die sicherste Lösung, da man so den tatsächlichen Status prüfen und updaten kann.

    Wenn ich mir vorstelle, ich werde direkt ausgeloggt, weil ich mal 1-2 Min. nichts gemacht habe (z.B. etwas gelesen/geschrieben etc.)....
    Geändert von the_scrat (08.06.2016 um 10:19 Uhr)
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  14. #14
    Contao-Nutzer Avatar von Sascha.Brandhoff
    Registriert seit
    05.01.2012.
    Ort
    Mittelhessen
    Beiträge
    187

    Standard

    Hi Cyklop,

    Zitat Zitat von cyklop Beitrag anzeigen
    Eigentlich hatte ich mir das eher so vorgestellt das die ältere Session immer gelöscht wird. Also für den Frontenduser wäre das dann ja in der tl_session die pid und name = 'FE_USER_AUTH'
    Gibt es dafür einen hook, den man nutzen kann, bevor hier ein neuer Eintrag erzeugt wird?
    Aber wenn Du den Eintrag aus der DB kickst kannst man ja nichts mehr prüfen oder hab ich was falsch verstanden? Wenn dann schon zwei Mitglieder angemeldet sind gehe ich davon aus das der Eintrag einfach neu erzeugt wird. Müßte man aber überprüfen.

    Zitat Zitat von cyklop Beitrag anzeigen
    Doch, man kann sich mit dem gleichen Benutzer über einen anderen Browser oder einen anderen Rechner neu anmelden und parallel arbeiten. Das möchte ich eben unterbinden.
    Spooky's Idee ist eigentlich super. Wenn Du das ganze wie von ihm genannt prüfst und über einen Login Hook den Login verweigerst und der Ajax-Request den Rest tun würde wäre auch alle 60 Sek. eine Aktion da damit es nicht zu doppelten Anmeldungen kommen kann. Das wäre doch einen Versuch wert das ganze so umzusetzen.

    Grüße

  15. #15
    Contao-Nutzer Avatar von Sascha.Brandhoff
    Registriert seit
    05.01.2012.
    Ort
    Mittelhessen
    Beiträge
    187

    Standard

    Habe gerade mal rumprobiert und mich über zwei verschiedene Browser am Backend mit dem selben Benutzer angemeldet.

    Es werden zwei unterschiedliche Sessions mit der gleichen PID in zwei verschiedenen Einträgen in der tl_session erzeugt. Wird währenddessen ein Eintrag gelöscht ist der Benutzer bei der nächsten Aktion abgemeldet. Soll bedeuten wer sich zuerst bewegt der bleibt eingeloggt. Somit würde es auch funktionieren bei zwei Einträgen mit der gleichen PID den letzten einfach zu löschen um den abzumelden der als letztes eine Aktion vollzogen hat.

    Als Hook bietet sich hier sicherlich der initializeSystem an.

    Grüße

  16. #16
    Contao-Nutzer
    Registriert seit
    25.02.2010.
    Beiträge
    89

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    Wieso die ältere Session einfach löschen? Damit wird doch immer der ausgeloggt, der mal "kurz" inaktiv ist..... ich glaube die Lösung von Sascha mit dem AJAX Request wäre die sicherste Lösung, da man so den tatsächlichen Status prüfen und updaten kann.

    Wenn ich mir vorstelle, ich werde direkt ausgeloggt, weil ich mal 1-2 Min. nichts gemacht habe (z.B. etwas gelesen/geschrieben etc.)....
    geht doch nur um den gleichen Benutzerzugang, wenn man sich mit dem von einem neuen Rechner einloggt wird dadurch nur die "ältere" Session entfernt.

    @Sascha.Brandhoff: geprüft werden muss hier doch eigentlich nichts. der Login ist ja an dieser stelle richtig und schmeißt eben nur die alten raus.

  17. #17
    Contao-Nutzer Avatar von Sascha.Brandhoff
    Registriert seit
    05.01.2012.
    Ort
    Mittelhessen
    Beiträge
    187

    Standard

    Kann das den jemand in eine Extension packen? Im Zweifel biete ich meine Dienste wie immer für eine Blu-Ray von meiner Amzon-Wunschliste an :P

  18. #18
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.892
    Partner-ID
    10107

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    Wieso die ältere Session einfach löschen? Damit wird doch immer der ausgeloggt, der mal "kurz" inaktiv ist.....

    Wenn ich mir vorstelle, ich werde direkt ausgeloggt, weil ich mal 1-2 Min. nichts gemacht habe (z.B. etwas gelesen/geschrieben etc.)....
    Das ist ja das Ziel von cyklop. Er möchte möglichst verhinden, dass der selbe Benutzer zwei oder mehrmals eingelogged ist. Das bedeutet ja nicht, dass du ausgelogged wirst, wenn du 1 bis 2 Minuten nichts gemacht hast. Das passiert ja dann nur, wenn sich in der Zeit jemand mit deinem Benutzer woanders angemeldet hat.

  19. #19
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Im Zweifel biete ich meine Dienste wie immer für eine Blu-Ray von meiner Amzon-Wunschliste an :P
    Vorsicht mit solchen Aussagen.... ;-)

    Zitat Zitat von Spooky Beitrag anzeigen
    Das ist ja das Ziel von cyklop. Er möchte möglichst verhinden, dass der selbe Benutzer zwei oder mehrmals eingelogged ist. Das bedeutet ja nicht, dass du ausgelogged wirst, wenn du 1 bis 2 Minuten nichts gemacht hast. Das passiert ja dann nur, wenn sich in der Zeit jemand mit deinem Benutzer woanders angemeldet hat.
    Dann hatte ich das falsch verstanden. Wenn User 1 eingeloggt ist, hat er Session 1. Macht er dann vielleicht 120 Sekunden nichts und User 2 loggt sich ein, würde ja Session 1 gelöscht, weil "inaktiv"? Und somit älter als Session 2 (User 2).
    Demnach müsste die Prüfung Session beim login stattfinden zumal die Session des gerade eingeloggten Users ja immer aktueller ist als die des bereits eingeloggten. Nur weiß man bei dem ja nicht, ob dieser nur gerade inaktiv ist, oder vielleicht komplett den Browser geschlossen hat. Oder steh ich hier auf dem Schlauch?
    Müsste hier die per Intervall die Aktivität der Session erneuert werden, damit hier gewährleistet ist, dass der User wirklich aktiv ist, auch wenn er z.B. mal 5 min. einen Text schreibt. Gerade wenn man sich z.B. im Tiny aufhält und Korrekturen macht bzw. einen Text formuliert sind gleich mal ein paar Minuten vorbei. Daher eben der Verweis auf die gute Idee von Sasche bzgl. des Ajax Request, der die Session ständig erneuert. Beim Login von User wird dieser feststellen, dass eine Session "aktiv" ist und diesen User 2 sofort ausloggen. Schließt User 1 den Browser oder loggt sich regulär aus, verfällt damit auch der Anspruch auf die Session
    Geändert von the_scrat (08.06.2016 um 11:11 Uhr)
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  20. #20
    Contao-Nutzer
    Registriert seit
    25.02.2010.
    Beiträge
    89

    Standard

    hier meine Funktion:

    PHP-Code:
    public function clearSessions(User $user)
        {
            if (
    $user instanceof FrontendUser) {
                
    $this->Database->Prepare("DELETE FROM `tl_session` WHERE `sessionID` NOT LIKE ? AND `pid` = ? AND `name` = ?")
                    ->
    execute(session_id(), $user->id'FE_USER_AUTH');
            }
        } 
    und der verwendete Hook:
    PHP-Code:
    $GLOBALS['TL_HOOKS']['postLogin'][] = array('MyClass''clearSessions'); 

  21. #21
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.892
    Partner-ID
    10107

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    Dann hatte ich das falsch verstanden. Wenn User 1 eingeloggt ist, hat er Session 1. Macht er dann vielleicht 120 Sekunden nichts und User 2 loggt sich ein, würde ja Session 1 gelöscht, weil "inaktiv"? Und somit älter als Session 2 (User 2).
    Nein, bei User 1 und User 2 bleibt alles gleich. Der Fall den wir hier diskutieren gilt für den Fall, wo der gleiche Benutzer nochmal eingelogged wird bzw. werden würde.

  22. #22
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Ja, die Bezeichnung User1 und User2 war etwas ungünstig gewählt. Also ich versteh das jetzt so, dass es sich um zwei Personen handelt die jedoch nur einen Mitgliederzugang (FE_USER_AUTH) haben.
    Aber es darf immer nur einer der beiden eingeloggt sein, richtig?

    Wenn es sich nur um eine Person handelt, versteh ich ehrlichgesagt den Zirkus nicht, denn wenn ich als eine Person mich an einem anderen Rechner einlogge,kann es mir doch vollkommen egal sein, ob ich technisch gesehen noch eine weitere Session in der DB habe, oder?


    Sorry, es geht um unterschiedliche Rechner..... verstanden, sorry, völlig falscher Ansatz meinerseits!
    Geändert von the_scrat (08.06.2016 um 11:26 Uhr)
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  23. #23
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.892
    Partner-ID
    10107

    Standard

    Oder unterschiedliche Browser . Oder unterschiedliche Sessions innerhalb des selben Browsers.
    Geändert von Spooky (08.06.2016 um 11:31 Uhr)

  24. #24
    Contao-Nutzer
    Registriert seit
    25.02.2010.
    Beiträge
    89

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    Ja, die Bezeichnung User1 und User2 war etwas ungünstig gewählt. Also ich versteh das jetzt so, dass es sich um zwei Personen handelt die jedoch nur einen Mitgliederzugang (FE_USER_AUTH) haben.
    Aber es darf immer nur einer der beiden eingeloggt sein, richtig?

    Wenn es sich nur um eine Person handelt, versteh ich ehrlichgesagt den Zirkus nicht, denn wenn ich als eine Person mich an einem anderen Rechner einlogge,kann es mir doch vollkommen egal sein, ob ich technisch gesehen noch eine weitere Session in der DB habe, oder?
    Ja es soll eben unterbunden werden das mit einem Account parallel gearbeitet werden kann. Bei einer Person ist das eigentlich egal, bringt aber dennoch manchmal Probleme wenn man Dinge an die Session koppelt.

  25. #25
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Sascha.Brandhoff Beitrag anzeigen
    Hi Andreas,

    mal rein aus interesse wird das den in der tl_member vermerkt ob der Nutzer aktuell angemeldet ist?
    Vorab: Der Thread startet mit Mitgliedern und mittlerweile wird sich über Benutzer unterhalten.

    In der tl_member waren so viele Felder, dass ich dachte eines davon wird schon ein Indikator dafür sein, ob ein Member eingeloggt ist. Ich habe das jetzt getestet und dem ist wohl leider nicht so.

    Da sind die Felder lastLogin und currentLogin. Hat sich ein Mitglied noch nie eingeloggt stehen beide Felder auf 0. Loggt er sich ein, dann kommt das aktuelle Datum ins Feld currentLogin. Loggt er sich aus, dann passiert mit den beiden Feldern leider nichts. Loggt er sich erneut ein, dann wird das Datum aus currentLogin nach lastLogin verschoben und in currentLogin kommt wieder das aktuelle Datum. Das ist natürlich doof, denn ich bin davon ausgegangen, dass das Datum von currentLogin beim Ausloggen nach lastLogin verschoben wird und currentLogin auf 0 gesetzt wird.

    Übersicht:
    Code:
    Action            - lastLogin - currentLogin - Note
    new member        - 0         - 0            -
    10:00 first login - 0         - 10           -
    11:00 logout      - 0         - 10           - lastL should be 10, currentL should be 0
    12:00 login       - 10        - 12           -
    13:00 logout      - 10        - 12           - lastL should be 12, currentL should be 0
    14:00 login       - 12        - 14           -
    Meiner Meinung nach ist das von der Logik her falsch wie es momentan bei Contao ist.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  26. #26
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.892
    Partner-ID
    10107

    Standard

    Zitat Zitat von Andreas Beitrag anzeigen
    In der tl_member waren so viele Felder, dass ich dachte eines davon wird schon ein Indikator dafür sein, ob ein Member eingeloggt ist. Ich habe das jetzt getestet und dem ist wohl leider nicht so.
    Auch hier kann man tl_session benutzen.

  27. #27
    Contao-Nutzer Avatar von Sascha.Brandhoff
    Registriert seit
    05.01.2012.
    Ort
    Mittelhessen
    Beiträge
    187

    Standard

    Moinsen Community,

    ich war jetzt nochmal so frei das in eine Extension zu kippen weil ein Kunde von mir da ebenfalls Bedarf hat.

    https://github.com/Sascha-Brandhoff/logincontroll
    • Unter "System > Einstellungen" kann man einen Standard definieren wie oft man sich mit einem Mitglieder-Account gleichzeitig anmelden darf. Muss man natürlich nicht, dann geht natürlich so oft wie man möchte es sei denn:
    • Bei dem jeweiligen Mitglied kann man das ganze nochmal exakt für den Account definieren.

    Jeweils in dem Bereich "Gleichzeitige Nutzung des Accounts".

    Per Composer kann man sich das ganze schon installieren. Später dann auch noch in der Erweiterungsverwaltung.

    Grüße
    Sascha

  28. #28
    Contao-Fan Avatar von Babelfisch
    Registriert seit
    30.06.2009.
    Ort
    Leipzig
    Beiträge
    894

    Standard

    Zitat Zitat von cyklop Beitrag anzeigen
    und der verwendete Hook:
    PHP-Code:
    $GLOBALS['TL_HOOKS']['postLogin'][] = array('MyClass''clearSessions'); 
    Besser postAuthenticate, weil mit postLogin nur das »normale« Login abgefangen wird und alle, die die Automatische Anmeldung aktiviert haben einem, dann entwischen, sofern sie vorher angemeldet waren.

    Gruß
    Meine aktiven Contao-Projekte: LingoliaStiftung firmm

  29. #29
    Contao-Nutzer
    Registriert seit
    30.07.2015.
    Beiträge
    140

    Standard

    Zitat Zitat von Sascha.Brandhoff Beitrag anzeigen

    https://github.com/Sascha-Brandhoff/logincontroll
    • Unter "System > Einstellungen" kann man einen Standard definieren wie oft man sich mit einem Mitglieder-Account gleichzeitig anmelden darf. Muss man natürlich nicht, dann geht natürlich so oft wie man möchte es sei denn:
    • Bei dem jeweiligen Mitglied kann man das ganze nochmal exakt für den Account definieren.

    Jeweils in dem Bereich "Gleichzeitige Nutzung des Accounts".

    Per Composer kann man sich das ganze schon installieren. Später dann auch noch in der Erweiterungsverwaltung.
    das ist schon etwas in die Jahre gekommen. Gibt es für die neuen Contao Versionen schon bessere Möglichkeiten den doppelten Login im Frontend zu unterbinden ?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •