Mehrfachinstanzen von Flash verhindern
Aktuell unterstützt Flash nicht das verhindern von mehrfachen Instanzen eines Flashfilms. Wieso sollte man überhaupt Mehrfachinstanzen verbieten wollen? Nun ja, ich verwende Flash als ein Chat Client, wo Mehrfachinstanzen Nutzern erlauben würde, mehrfach in den Chat zu gehen, was man nicht wirklich haben möchte. Wie verhindert man es nun?
Da es keine Clientseitige Lösung gibt, muss eine Serverseitige Lösung her. Meine erste Überlegung war, nur eine Verbindung pro Useraccount zuzulassen, was normalerweise auch einwandfrei funktionieren sollte. Ein Problem gibt es nur, wenn die Verbindung des Users aus irgendeinem Grund abbricht. Dann könnte der User so lange nicht wieder in den Chat, bis der Server gemerkt hat, dass der alte Client nicht mehr lebt. Das kann bei einem schlecht gewählten Timeout sehr lange dauern und ist daher nicht sonderlich Nutzerfreundlich, wir wollen ja schließlich nicht aktive User ausschließen. Eine andere Möglichkeit wäre eine IP-basierte Sperre (eine Verbindung pro IP), wo man dieses Problem dann nicht hat. Dafür können mehrere User hinter einem Router nicht mehr gleichzeitig sich verbinden, also geht das auch nicht. Also habe ich mir noch ein drittes Verfahren überlegt:
Sobald ein Client sich mit dem Server verbindet, schaut dieser nach, ob es bereits einen User mit dem selben Account eingeloggt ist. Falls nein, passiert nix weiter. Falls ja, sendet der Server dem alten Client eine “alive”-Nachricht und lässt den neuen Client erst einmal sich verbinden und wartet gleichzeitig auf die Antwortnachricht vom alten Client. Bekommt er eine, so kickt er den neuen User, da der User dann auf jedenfalls noch im Chat ist. Andernfalls kann man dann den alten Client kicken lassen.
Dieses Verfahren funktioniert sehr gut auf meinem Chat-Server. Um das Verfahren ebenfalls für Gäste, also User ohne festen Account einzusetzen, sollte man denen uniqueIDs vergeben, die als Flash Cookie browserübergreifend gespeichert werden. So kann man ebenfalls verhindern, dass User versuchen, durch Öffnen von verschiedenen Browsern mehrfach eine Verbindung aufzubauen.