Login geschützer Bereich mit Warteschlange und Priorität

as333

Erfahrenes Mitglied
Hi,

ich habe folgendes Problem.
Ich würde noch gerne zu meinem bestehenden Login (User werden in MySQL-Datenbank angelegt) einen weiteren Login-Bereich anlegen,
der sich wie eine Art Warteschleife verhält.
Wenn ein User eingeloggt ist soll dieser eine Art Kontrollleuchte angezeigt bekommen,
das ein weiterer User sich einloggen möchte.
Falls weitere User sich einloggen möchten sollen diese dann der Reihe nach abgearbeitet werden.

Und wenn sich ein Administrator einloggen möchte soll dieser schnellstmöglich sich einloggen können.
Das wäre also so eine Art Prioriätsabfrage.
 
Darf sich in dem geschützen Bereich immer nur ein User aufhalten oder warum dieser Aufwand?

Also sobald das Login-Formular abgesendet wird, wird also geprüft ob bereits ein User online ist?
(Sprich ich log mich ein, erzeuge eine Session-Variable ($log) und beim neuen Login wird geprüft ob die Variable gesetzt ist!)
Ist jemand eingeloggt, bekommt dieser eine Fehlermeldung?
Wenn dies der Fall ist erzeuge einfach in dem IF-Pfad eine Session-Variable ($newUser).
(in die Variable könnte man zum Beispiel die Login-Daten des neuen Users packen)

Auf jeder Seite prüfst du nun, ob diese genannte Session-Variable ($newUser) gesetzt ist, wenn sie gesetzt wurde, blendest du die "Leuchte" ein.

Wenn sich jemand einloggen möchte, eine Fehlermeldung erhält, dann würde ich einfach sagen: "Sie werden automatisch eingeloggt, sobald der User sich ausloggt"
Dann erstellst du eine automatische Seitenaktuallisierung von 5 bis 10 sekunden, da prüfst du einfach, ob die Variable $log gesetzt ist (beim logout muss natürlich ein unset($log); erfolgen)
Ist die Variable nicht mehr gesetzt verwende die Informationen aus der Variable $newUser um den User anzumelden.

Ist das in etwa was du möchtest?

Die Bedinungen für User und Admin zu realisieren ist dann auch nicht mehr schwer, aber ist es vom Grundprinzip richtig, wie ich es verstanden habe
 
Hi as333,

die Kontrollleuchte kann darüber gesteuert werden das wenn in der Tabelle nur ein Eintrag vorhanden ist passiert nichts, doch so bald mindestens ein zweiter Eintrag in der Tabelle vorhanden ist, wird die Lampe angezeigt.

Die Reihenfolge könnte dadurch festgelegt werden das beim "Anmeldeversuch" die Uhrzeit mitgespeichert wird. Wenn dann wieder ein Platz frei wird, wird der Eintrag mit der frühesten Uhrzeit genommen.

Beim Admin machst du es genauso nur das du halt zuerst prüfst ob jemand in der Tabelle steht der als Admin gekennzeichnet ist.

Das Problem bei der Sache ist aber das derjenige der sich einloggen möchte bei einer reinen PHP Lösung immer wieder versuchen muss sich anzumelden sonst merkt er nicht das es geht!!

Gruß Thomas
 
hi,

ja vom prinzip her ist es richtig.
Es soll sich wirklich immer nur 1 User in dem Bereich befinden und erst wenn ein eingeloggter User sich ausloggt ein neuer eintreten können.
Ich glaube nur das noch das Problem sein wird das ich es irgendwie geregelt bekommen muss, dass wenn sich jetzt zum Beispiel 4 Leute anmelden möchten das ich da eine Art Reihenfolge reinbekomme.
Das weiß ich noch nicht wie ich das realisiert bekomme.

Oder ist es vielleicht einfacherer das man sagt wenn einer eingeloggt ist kann dieser solange drin bleiben wie er möchte und wenn dann sich ein weiterer einloggen möchte das er dann nur noch 5 Minuten zeit hat und dann ausgeloggt wird und der andere User dann automatisch eingeloggt wird?
 
hi,

Ich glaube nur das noch das Problem sein wird das ich es irgendwie geregelt bekommen muss, dass wenn sich jetzt zum Beispiel 4 Leute anmelden möchten das ich da eine Art Reihenfolge reinbekomme.
Das weiß ich noch nicht wie ich das realisiert bekomme.

So wie ich es oben geschrieben habe. Wenn sich jemand anmelden will wird die jeweilige Uhrzeit gespeichert und dann wenn was frei wird, wird derjenige angemeldet der als es als erster versucht hat.

Das steht zum Beispiel in der Tabelle (User, Uhrzeit, Adminstatus (0 = Nein / 1 = Ja):

Besucher 1 - 10:05:15 - 0
Besucher 2 - 09:58:38 - 0
Besucher 3 - 10:34:00 - 0

PHP:
SELECT * FROM tabelle ORDER BY adminstatus DESC, uhrzeit ASC LIMIT 1

Hier bekommt jetzt Besucher 2 Zugang das es als erster da war und es auch keinen Admin gibt.

Besucher 1 - 10:05:15 - 0
Besucher 2 - 09:58:38 - 0
Besucher 3 - 10:34:00 - 1

Hier bekommt Besucher 3 Zugang. Er war zwar der letzte doch er ist als Admin gekennzeichnet.
 
Genau wie tombe es sagt, musst nur daran denken den User sobald er eingeloggt ist aus der Tabelle zu werfen, da sonst niemals ein anderer rein kommt ^^

Aber mal ein Beispiel:

User 0 - 10:00:00 (eingeloggt)

So dann versucht es der 1. und wird in die Tabelle geschrieben.

Besucher 1 - 10:05:15 - 0

Gut, er hat nun aber gar nicht mehr das Interesse in den Bereich zu kommen?
Wie fliegt er wieder aus der Tabelle? das der User nach ihm rein darf?

Update mit erneuten Loginversuch wäre der Tot, da man dann immer weiter nach hinten rutscht.
Erst bei eingeloggten Zustand aus der Tabelle zu fliegen, angesprochene Problem.
Zeitliche Beständigkeit in der Tabelle? Nur welche Zeit sollte man dort wählen?

So richtig ausgereift schein es alles nicht zu sein. Mit etwas mehr Intergrundwissen bezüglich der Sachlage würde man bestimmt ein System finden!
 
Also das man sich nach hinter verschiebt wenn man "manuell" versucht sich nochmal anzumelden kann verhindert werden indem geprüft wird ob derjenige schon in der Tabelle vorhanden ist.

Und wenn die erneuten (automatischen) Anmeldeversuche z.B. nach 10 Versuchen nicht erfolgreich waren wird man aus der Tabelle gelöscht und erhält einen entsprechenden Hinweis.
 
hi,
super vielen dank euch.
Ich glaube so bekomme ich es hin.
Schaffe es erst leider am Wochenende ausgiebig zu testen und zu implementieren.
 
Hi,

ich habe hierzu noch ein Problem.
Also das mit der Anzeige der Reihenfolge klappt.
Aber wenn wir jetzt mal das Beispiel von tombe nehmen
Besucher 1 - 10:05:15 - 0
Besucher 2 - 09:58:38 - 0
Besucher 3 - 10:34:00 - 0

sollte ja eigentlich Benutzer 2 als nächstes eingeloggt werden.
Bei mir bekommen aber alle 3 Benutzer eine Meldung das sie sich jetzt einloggen können sobald sich der User ausloggt der gerade online war.
Eigentlich sollte ja nur Benutzer 2 eine Nachricht bekomme, also angezeigt bekommen das er sich jetzt einloggen kann.
Hierfür müsste ich doch die Zeiten die ja mit in die mySQL-Tabelle eingetragen worden sind vergleichen.
Aber wie kann ich dann nur dem Benutzer der sich als nächstes einloggen darf signalisieren das er sich bereits jetzt einloggen kann wenn der aktuelle User sich ausgeloggt hat?

Ich habe es wie folgt probiert.
Die Reihenfolge wird richtig angezeigt.

Aber wie kann ich jetzt dem User mit dem frühesten Einloggversuch mitteilen das nur er sich jetzt einloggen kann?

PHP:
$reihenfolge=mysql_query("SELECT * FROM liste ORDER BY Uhrzeitx ASC LIMIT 5")
or die(mysql_error());

while($row = mysql_fetch_array($reihenfolge))
{
        echo "<br><b>Uhrzeiten</b><br>";
        echo $row['Uhrzeitx'];
        echo "<br>";
}
 
Hi,

ich habe noch eine Frage.
Also wenn ich es wie folgt sortieren lasse:

PHP:
SELECT * FROM tabelle ORDER BY adminstatus DESC, uhrzeit ASC LIMIT 1

Und wenn sich dann Benutzer mit dem adminstatus = 1 versuchen einzuloggen funktioniert die Reihenfolge, sodass sich zuerst der User mit dem adminstatus einloggen kann.
Wenn sich jedoch 2 Benutzer mit dem adminstatus=1 versuchen einzuloggen funktioniert es auch nicht.

Wie bekomme ich denn die Reihenfolge am besten hin?


Wenn sich jedoch nur Benutzer mit adminstatus = 0 versuchen einzuloggen funktioniert die Sortierung nicht.

Kann mir einer sagen warum das nicht geht, weil durch "uhrzeit ASC" sollte es doch eigentlich auch sortiert werden, oder?
 
Zuletzt bearbeitet:
Zurück