PHP - SESSION - mehrfachlogin - unterbinden - Optimierung?

Midivirus
Guten Morgen zusammen,

ich denke, das Szenario dürfte jedem bekannt sein, mittels Google hab ich dann auch gleich zwei Artikel gefunden:
Access 2010 Wie verhindern, daß ein User eine geteilte DB mehrfach öffnen kann?
Mehrfachanmeldung eines Benutzer auf W2kServer unterbinden??

In einem Webprojekt soll jedes Konto nur einer Person zugeordnet sein und wenn jemand Zugriff haben möchte,
dieser ein eigenständiges beantragen.

Habe gedanklich und im Testmodus folgendes realisiert:

DB Tabelle "online"
darüber wird der sog. online-counter gesteuert

Folgendes wird nach dem Programmablaufplan gemacht:

Account hat eine Sitzung offen
eine weitere Sitzung wird auf den Account geöffnet
alle anderen Sitzungen als die eigene wird in einem Feld ein Zeichen geschrieben

Bei jedem Seitenaufruf wird dieses Kontrollfeld ausgelesen und wenn das Zeichen gefunden wird,
gibt es sofort einen Sicherheitslogout!

Kurz heißt es:
immer die letzt eingeloggte Sitzung gewinnt, alle anderen fliegen immer wieder raus.

Jetzt ist nur die Frage, ob in der online-Tabelle es sinnvoll ist oder eher die user-Tabelle verwendet werden soll.
Letzteres klappt dann nicht, wenn die zuletzt eingeloggte Sitzung bestehen bleibt, da alle Sitzungen den gleichen Datensatz verwenden!

In diesem Sinne,
vielen Dank!

Midi

Hier noch ein Thread, der im Schlusszitat genau behandelt, was ich verhindern möchte:
mehrfachlogin gleichzeitig aus verschiedenen pcs verhindern - wie ?
Der "Missbrauch" passiert aber nur bei Usern, die sich in dem selben Account einloggen (weil z.B drei Leute das Login und PW von Account A kennen). Die reslichen Accounts C, D, E etc. bleiben davon unberührt.

Content-Key: 176378

Url: https://administrator.de/contentid/176378

Ausgedruckt am: 23.01.2022 um 21:01 Uhr

Mitglied: ITSchlumpf
ITSchlumpf 17.11.2011 um 10:02:20 Uhr
Goto Top
Morgen Midivirus,

weiß nicht genau ob das für dich zutreffend wäre, aber kannst du nicht einfach beim login in deine DB ein Flag setzen von wegen user ist angemeldet. Wenn sich jetzt ein anderer User mit den gleichen Daten anmelden will, kommt eine Fehlermeldung das der User schon angemeldet ist.
Sobald sich der User wieder ausloggt wird das Flag gelöscht/überschrieben und man kann sich wieder anmelden.
Wäre das eine Option?

Gruß
Schlumpf
Mitglied: Midivirus
Midivirus 17.11.2011 um 10:19:52 Uhr
Goto Top
Moin @ITSchlumpf,
die Option ist gut, dann käme der Fall timeout nach oben!

Dies empfinde ich derzeit nicht sonderlich attraktiv!

In dem Accout wird ebenfalls schon auf Logout vergessen geprüft und beim nächsten Login dargestellt.

Aber der Gedanke ist gut.

Midi

Mitglied: ITSchlumpf
ITSchlumpf 17.11.2011 um 10:24:52 Uhr
Goto Top
Wie machst du das mit dem Timeout und Logout vergessen? :) face-smile

Probiere gerade ein paar sachen mit PHP und habe mir ein kleines login script geschrieben und da würde sowas auch noch gut reinpassen ;-) face-wink

Gruß
Schlumpf
Mitglied: Midivirus
Midivirus 17.11.2011 um 10:31:22 Uhr
Goto Top
nun,
easy going halt:
gibt das feld "logout" und dieses wird bei login auf 1 gesetzt und beim logout auf 0!
Wenn bei login hier 1, dann Meldung!

besser?

@139374:
du musst hier immer ein Referenzzeitpunkt haben.
Heißt, bei jedem Seitenwechsel [siehe auch diese ganzen onlinecounter], muss ein Feld immer den Zeitpunkt des Aufrufes haben.
Bei deinem obigen Versuch, wird gecheckt, ob das Feld jetzt älter als x Sekunden ist!

So funktionieren onlinecounter ... !

Aber dies kann via PN weiter exorziert werden!
Mitglied: dog
dog 17.11.2011 um 16:10:00 Uhr
Goto Top
Du solltest auch noch AJAX dazu nehmen, dass immer mal wieder mitteilt, wenn ein User eingeloggt ist und bei einem Fehler ihn sofort ausloggt.

Eine Tabelle würde dann so aussehen:

Wenn sich der User einloggt wird für ihn ein Eintrag mit active=1 angelegt und für alle anderen Einträge mit der selben user_id active=0 gesetzt.
Bei jedem Seitenaufruf wird dann geprüft ob die session_id noch active ist und ggf. der User ausgeloggt.

Alternativ ginge auch die Holzhammer-Methode: PHP speichert ja alle Sessions in einem bestimmten Ordner als sess_SESSIONID.
Man könnte also aus der DB alle Session IDs rausziehen und die Dateien auf der Festplatte löschen, damit wäre der User automatisch ausgeloggt (allerdings sollte man dann im $_SESSION-Array ein Flag zur Kontrolle haben).
Mitglied: Midivirus
Midivirus 18.11.2011 um 09:21:44 Uhr
Goto Top
Merci für deinen Gedanken.

Ich wollte nur wenig mit JS basteln, da ich mich in dem Bereich so gut wie überhaupt nicht bewegen kann, mangels Kenntnisse!

Hab derzeit so eine schöne Tabelle:


Man könnte natürlich AJAX einbauen, der Aufwand übersteigt mein erwartetes Ergebnis.

Derzeit wird folgendes gemacht:
Wenn eine neue Sitzung auf den Account geöfnet wird,
bekommt das Feld verlassen den gleichen Wert wie ts und alle anderen Sitzungen werden bei dem nächsten Seitenwechsel gekickt!

ob ich aus dem tmp auch noch die Dateien kicke, käme dann im nächsten Schritt (...)



Ansonsten fahre ich wohl ganz gut, bis jetzt!

Midi

Heiß diskutierte Beiträge
question
Alternative für MS TeamsBlackDevilVor 1 TagFrageVideo & Streaming5 Kommentare

Servus Zusammen, ich arbeite eigentlich grundsätzlich remote, was eben auch Kundengespräche und -beratung inkludiert. Bisher mache ich das über MS Teams, was im Grundsatz auch ...

question
Analog Telefonanschluss aufs Netzwerk bringenpeter91gVor 1 TagFrageISDN & Analoganschlüsse13 Kommentare

Hallo zusammen, ich habe aktuell ein Router von meinem Provider welcher im Bridge-Modus geschalten ist. Dadurch kann ich die Festnetztelefonie nur über den Analog-Anschluss am ...

question
Verständnisproblem SubnettingKarolaVor 1 TagFrageNetzwerkgrundlagen7 Kommentare

Hallo, möchte mal nerven weil ich keine Antwort finde Ein Netzwerk 172.16.0.0 /16 besteht aus einem alten Router als 4 Port Switch und 4 Clients. ...

question
Syntax zum Mappen einer Freigabe auf einem RDSH gelöst mtcmtcVor 1 TagFrageNetzwerke14 Kommentare

Hallo zusammen, ich starte normalerweise eine rdp-Datei um mich vom HomeOffice auf meinen RDSH-Client in der Firma zu verbinden. -> also kein Problem Auf diesem ...

question
Apps mit riesigen Datenbank verbindenBella21Vor 1 TagFrageEntwicklung4 Kommentare

Hallo alle zusammen, ich suche nach einer Lösung für einen APP. Der Datenbank ist riesig mehr als 10GB, da die komplette Datenbank nicht auf das ...

question
Umgestaltung HeimnetzwerkPaulePilsVor 1 TagFrageNetzwerke1 Kommentar

Hallo zusammen, ich bin seit heute neu im Forum, deshalb hoffe ich, dass meine Beitrag an der richtigen Stelle platziert ist :-) Ich würde mich ...

question
Ist diese Hardware sinnvoll für privaten Haushalt?stonevVor 12 StundenFrageRouter & Routing4 Kommentare

Hallo erstmal :) Meine alte Fritzbox 7490 spinnt seit gestern. Ich gehe von Alterschwäche aus, es wird also Ersatz fällig. Zufrieden war ich mit ihr ...

question
Hyper V Maschine (Windows 10 Pro) auf Server2022 langsam gelöst factxyVor 1 TagFrageHyper-V6 Kommentare

Hallo, ich habe einen neuen Server2022 augesetzt und dort von einem 2016er Server eine Windows10 HyperV erst exportiert dann am 2022er importiert. Soweit mit gleicher ...