2009-12-04 5 views
5

Ich möchte etwas wie play.clubpenguin.com tun.Begrenzen Client auf eine Website mit 1 Registerkarte und 1 Browser zu besuchen?

Wenn Sie die Seite besuchen, vielleicht Firefox oder Internet Explorer verwenden, wenn Sie einen neuen Tab öffnen oder einen anderen Browser verwenden, wird beim nächsten Besuch dieser Site Folgendes angezeigt: "Bitte schließen Sie die anderer Browser, der diese Seite geöffnet hat "oder so ähnlich.

Wie geht das? (Sein Wunsch des Kunden)

Weitere Informationen: Die Seite ist Flash-Site

EDIT:

Ok, ich denke, das ist eine schwierige Frage, na ja, im Allgemeinen, kann dies mit PHP erfolgen, mysql und JS?

+0

Aus der Sicht eines Benutzers, frage ich mich WARUM möchten Sie die Fähigkeiten Ihrer Benutzer einschränken?
Warum möchten Sie ihre Freiheit wegnehmen? –

+0

Ok, das ist nur ein Beispiel: Wie Club Pinguin, wenn Sie Multi-Browser-Login erlauben, können Sie Geld auf betrügerische Weise verdienen, sagen wir mal. Sie loggen sich als Benutzer A und B ein. A und B gehen in den Multiplayer-Spielraum, Benutzer A steht da, um Benutzer B Geld zu verdienen. Nun, das ist nur eines der Beispiele. Und außerdem, das ist nicht meine Idee, "die Anfrage eines Kunden", ich setze diese SENTENCE auch in meiner Frage. WENN SIE KEINE ANTWORT HABEN, BEANTWORTEN SIE NICHT IM ANTWORTFELD, ANTWORT IN KOMMENTAR. – webdever

+0

Entschuldigung für die Kappen. Ich kämpfe und versuche, dieses Problem jetzt zu lösen. – webdever

Antwort

0

Ein paar Optionen in dem Sinne ...

  1. Wenn sie zum ersten Mal der Seite öffnen, müssen Sie den Benutzer aktuellen Zustand in einem Cookie oder ein ähnlichem zu speichern, die Sie für jedes Mal überprüfen würden Sie öffnen die Website. Wenn der Status Aktiv ist, bedeutet dies, dass sie ein anderes Fenster geöffnet haben. Das Problem, dass der Status gelöscht wird, wenn er das ursprüngliche Site-Fenster verlässt - Sie müssen auf das Ereignis window.onunload warten und den Status zu diesem Zeitpunkt löschen - aber Sie können nicht 100% garantieren, dass dies geschieht.
  2. Sonst könnten Sie ein Skript auf der Website pings ein Server-Skript alle n Sekunden, Benachrichtigung des Servers gibt es ein Fenster für diesen Client öffnen, und verhindern, dass neue Fenster geöffnet werden, bis es einen Ping-Ablauf gibt.
  3. Um komplexer zu werden, könnten Sie eine dauerhafte Verbindung zwischen dem Server und dem Client aufrechterhalten (über Sockets oder ähnliches), die das gleiche merken würde. Weniger Anrufe vom Client, etwas komplizierter einzurichten. Grundlegende Informationen zu Flash + Sockets finden Sie unter http://www.kirupa.com/developer/flash8/php5sockets_flash8.htm.
  4. Wenn Sie mit Flash arbeiten, können Sie in Local Shared Objects (Flash-Cookies) nachsehen, um den Status zu speichern. Es ist immer noch möglich, das Entladeereignis zu verpassen, aber zumindest bleibt das Cookie in allen Browsersitzungen und Browsertypen bestehen.

Option 3 ist die beste IMHO.

+0

1. Ich denke, wird nicht über mehrere Browser auf dem Client-Rechner funktionieren. –

+0

Ich habe zwar auch Cookies verwendet, aber dann habe ich auch Probleme gefunden, wenn ich es benutzt habe. Ihre dritte Option klingt am besten, aber ich weiß wirklich nicht, wie ich anfangen soll, ich meine es umzusetzen. Könntest du genauer auf die 3. Option eingehen? – webdever

+0

@Kumar: Haben Sie eine bessere Lösung? – webdever

0

Wenn Sie den Zugriff mit zwei verschiedenen Logins verhindern möchten, können Sie eine Regel erzwingen, die eine bestimmte Ressource blockiert.

Die Client-IP könnte eine dieser sperrbaren Ressourcen sein: nur eine Sitzung für eine bestimmte IP-Adresse zulässig. Das würde den Betrug auf Personen reduzieren, die mehrere öffentliche IP-Adressen haben. Personen, die öffentliche IP-Adresse über Proxy teilen, haben ein Problem.

Ich sehe nicht, welche andere sperrbare Ressource Sie problemlos verwenden können.

+0

Ja, ich sollte diese Idee zu meinem Kunden vorgeschlagen. Sie wollen modellieren wie clubpenguin, d. H. Wenn Sie die Seite betreten, nicht einmal die Login-Seite, werden Sie die Nachricht eingeben und Sie bitten, alle Browser/Tabs zu schließen, die es öffnen. – webdever

+0

Was ist mit Menschen hinter Firewalls, wo alle unter der gleichen externen IP-Adresse angezeigt werden? – Marcus

+0

Oh yeah ... Fast schon vergessen.IPs sind nicht sehr zuverlässig .. – webdever

7

Jedes Mal, wenn Sie dem Benutzer die Flash-Seite bereitstellen, generieren Sie ein zufälliges Token. Betten Sie dieses Token irgendwo auf der Seite ein, zum Beispiel als FlashVar. Speichern Sie außerdem das zuletzt generierte Token in der Benutzersitzung.

Immer wenn der Flash etwas auf den Server zurückbucht, poste auch das Token. Wenn das Token nicht mit dem in der Sitzung gespeicherten Token übereinstimmt, lehnen Sie den Post ab.

Auf diese Weise kann nur die zuletzt generierte Version der Seite mit dem Server kommunizieren und wenn der Benutzer mehrere Versionen der Seite öffnet, funktioniert nur die neueste Version.

Diese Technik sollte funktionieren, auch wenn der Benutzer zusätzliche Browser auf anderen Computern öffnet. Es verwendet keine IP-Adressen zur Identitätsfeststellung. Und es gibt keine Chance, dass ein Benutzer irgendwie dauerhaft "ausgesperrt" wird, weil jedes Mal, wenn sie die Seite wieder öffnen, das gespeicherte Token zurückgesetzt wird.

Es ist eine ähnliche Idee, wie einige Frameworks ein Validierungs-Token in Formulare einfügen, um Cross-site Request Forgery Angriffe zu verhindern.

-1

Lösung:

Antwort Ihre Kunden mit einem NO beantragen, weil Sie das Webdesign-Guru, der weiß, was das Beste für die Besucher des Kunden. Die Website muss nicht Ihren Kunden ansprechen, sondern die Besucher des Kunden. und wenn sie so hart auf ihren eigenen Computern begrenzt sind, sind sie alles andere als zufrieden.

+0

-1: "Das ist nicht sinnvoll" –

2

versuchen, den folgenden Code verwendet:

window.onload = function(){ 
    if (document.cookie.indexOf("_instance=true") === -1) { 
    document.cookie = "_instance=true"; 
    // Set the onunload function 
    window.onunload = function(){ 
     document.cookie ="_instance=true;expires=Thu, 01-Jan-1970 00:00:01 GMT"; 
    }; 
    // Load the application 
    } 
    else { 
    // Notify the user 
    } 
    }; 

Der Code der Benutzer beschränken wird ein Browser-Tab zu einem Zeitpunkt zu öffnen und während der Aktualisierung des Browsers (aktuelle Registerkarte) der Code wird keine Benachrichtigung angezeigt. Kopieren Sie das Einfügen der gleichen URL in neue Registerkarte wird nicht erlaubt, den Benutzer zu öffnen. für weitere Informationen versuchen this

Verwandte Themen