PHP - Stoppen Sie gleichzeitige Benutzer Logins

8

Ich brauche eine Methode, um gleichzeitige Logins mit PHP / MySQL zu stoppen.

Die aktuelle Konfiguration

Momentan teilen sich zwei Leute den gleichen Login auf einem System, das ich intern dort aufgebaut habe, wo ich arbeite. Aufgrund der Art des Systems möchte ich nicht, dass beide sich einloggen.

Was ich versucht habe

Etwa 10 Artikel über stackoverflow und gegoogelt so lange ich kann.

Ich habe auch versucht, in der Benutzertabelle ein "eingeloggt" -Feld hinzuzufügen, das beim Anmelden auf 1 gesetzt wurde und beim Abmelden auf 0 gesetzt wurde. Wenn dann die gleichen Benutzerdaten bei der Anmeldung verwendet würden, würde es fehlschlagen.

Das Problem, das ich hatte, war, dass, wenn die Person, die eingeloggt war, den Browser heruntergefahren hat, ohne sich ordnungsgemäß abzumelden, die Datenbank nicht aktualisiert wurde. Dann bekomme ich einen Anruf von dieser Person und ich müsste den Wert in der Datenbank auf 0 zurücksetzen.

Dies ist in Zukunft nicht machbar, da das Produkt bald intern auf etwa 20 Personen ausgeweitet wird.

Was ich brauche

Was ich brauche, ist einen Weg zu finden, dass beim Schließen des Browsers ein Skript ausgeführt wird, um die Datenbank zu aktualisieren. Alternativ eine Möglichkeit, jede aktuelle Sitzung auf dem Server zu lesen, die ich manipulieren könnte, oder etwas anderes.

Einschränkungen

Unsere Hosting-Provider sind schrecklich und in der Folge sind die Änderungen, die ich am Server machen kann, begrenzt / unmöglich. Das Hosting ist eine Shared-Hosting-Lösung.

    
itsphil 25.05.2011, 14:43
quelle

5 Antworten

6
  

Was ich brauche, ist einen Weg zu finden, dass beim Schließen des Browsers ein Skript ausgeführt wird, um die Datenbank zu aktualisieren.

Sie können nicht.

Ihre beste Lösung könnte sein, die Sitzungs-ID dem Benutzer in der Datenbank zuzuordnen. Wenn die Sitzungs-ID auf dem Computer des Benutzers nicht mit der letzten Sitzungs-ID in der Datenbank übereinstimmt, melden Sie sich an und aktualisieren Sie die Datenbank.

    
ceejayoz 25.05.2011, 14:47
quelle
3

vielleicht sollten Sie das umdrehen.

Die Person, die sich anzumelden versucht, erhält eine neue Sitzung, und die neue Sitzung macht alle alten Sitzungen für denselben Benutzernamen ungültig (und protokolliert sie somit)

So kann immer nur eine Person angemeldet sein.

    
David Chan 25.05.2011 14:48
quelle
1

Es gibt keine narrensichere Möglichkeit, dies zu tun, aufgrund der Natur von HTTP. Aber wenn Sie mit einer Verzögerungszeit umgehen können, gibt es eine Lösung.

Das Beste, was Sie tun können, ist, dass ein JS-Skript ein "keep-alive" -Skript auf Ihrem Server antrifft. Mach das alle 30 Sekunden oder so. Wenn Ihr Server innerhalb von 1 Minute nichts vom Client gehört hat, schließen Sie die Sitzung.

    
Brad 25.05.2011 14:45
quelle
0

Sie können das Feld "loggedin" verwenden, aber ein weiteres Feld "logged_timestamp" hinzufügen. Dann überprüfen Sie, wann sich der Benutzer das letzte Mal angemeldet hat.

Wenn es länger ist als die Dauer der Sitzung, erlauben Sie ihm, sich automatisch erneut anzumelden

    
Andre 25.05.2011 14:50
quelle
0

Ich habe das Session-Skript jquery delay time out verwendet, um sie automatisch auszuloggen. Das Skript ruft ein PHP-Skript zurück, mit dem wir den Zeitstempel der Datenbanksitzung ändern können. Also, ich denke dieser Link wird dir helfen. Jquery Leerlaufzeit

    
chandoo 24.10.2011 03:41
quelle