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.
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.
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.
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.
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
Tags und Links php mysql session login user-management