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
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
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
Hi Andreas,
mal rein aus interesse wird das den in der tl_member vermerkt ob der Nutzer aktuell angemeldet ist?
Grüße
eigentlich dient einem hier nur die tl_session als hilfe, oder?
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 08:59 Uhr)
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?
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.
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...
Doch nicht, ja dann kannst du es so machen und die ältere Session einfach löschen. Sollte dann perfekt funktionieren .
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 09:19 Uhr)
Programmers don't comment their code. It was hard to write, it should be hard to understand...
Hi Cyklop,
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.
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
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
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.
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
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.
Vorsicht mit solchen Aussagen.... ;-)Im Zweifel biete ich meine Dienste wie immer für eine Blu-Ray von meiner Amzon-Wunschliste an :P
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 10:11 Uhr)
Programmers don't comment their code. It was hard to write, it should be hard to understand...
hier meine Funktion:
und der verwendete Hook: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');
}
}
PHP-Code:
$GLOBALS['TL_HOOKS']['postLogin'][] = array('MyClass', 'clearSessions');
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 10:26 Uhr)
Programmers don't comment their code. It was hard to write, it should be hard to understand...
Oder unterschiedliche Browser . Oder unterschiedliche Sessions innerhalb des selben Browsers.
Geändert von Spooky (08.06.2016 um 10:31 Uhr)
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:
Meiner Meinung nach ist das von der Logik her falsch wie es momentan bei Contao ist.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 -
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
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
Meine aktiven Contao-Projekte: Lingolia • Stiftung firmm
Aktive Benutzer in diesem Thema: 2 (Registrierte Benutzer: 0, Gäste: 2)
Lesezeichen