2009-12-04 13 views
5

Mi piacerebbe fare qualcosa come play.clubpenguin.com.Limitare il client a visitare un sito Web con 1 scheda e 1 browser?

Quello che fa è che, quando visiti il ​​sito, magari usando firefox o IE, se apri una nuova scheda o usi un altro browser, quando visiti nuovamente quel sito, mostrerà qualcosa del tipo: "Chiudi il altro browser che ha aperto questa pagina "o qualcosa del genere.

Come fare questo? (Su richiesta del suo cliente)

Maggiori informazioni: Il sito è sito in Flash

EDIT:

Ok, penso che questa è una domanda difficile, bene, in generale, questo può essere fatto utilizzando php, mysql e JS?

+0

Dal punto di vista dell'utente, mi chiedo PERCHÉ vorresti limitare le capacità dei tuoi utenti?
Perché vorresti liberarti della loro libertà? –

+0

Ok, questo è solo un esempio: come il pinguino del club, se si consente l'accesso con più browser, si può guadagnare denaro in modo ingannevole, diciamo. Effettua il login come utente A e B. A e B vai in sala giochi multiplayer, l'utente A non fa nulla per consentire all'utente B di guadagnare denaro. Bene, questo è solo uno degli esempi. E inoltre, QUESTA NON E 'LA MIA IDEA, "SU RICHIESTA DEL CLIENTE", ho messo quella SENTENZA anche nella mia domanda. SE NON HAI UNA RISPOSTA, NON RISPONDERE AL CAMPO DELLA RISPOSTA, RISPONDERE AL COMMENTO. – webdever

+0

Ci scusiamo per i cappucci. Sto lottando e sto cercando di risolvere questo problema adesso. – webdever

risposta

0

Alcune opzioni primavera alla mente ...

  1. Quando aprono prima il sito, avresti bisogno di memorizzare lo stato corrente dell'utente in un cookie o simili, che si sarebbe controllare per ogni volta apri il sito. Se lo stato è attivo, significa che hanno un'altra finestra aperta. Il problema nel garantire che lo stato venga cancellato quando lasciano la finestra del sito originale: dovrai ascoltare l'evento window.onunload e cancellare lo stato in quel punto, ma non puoi garantire al 100% che ciò accada.
  2. Altrimenti, è possibile inserire uno script sul sito che esegue il ping di uno script del server ogni n secondi, notificando al server che è presente una finestra aperta per quel client e impedisce l'apertura di nuove finestre fino a quando non si verifica un intervallo di ping.
  3. Per rendere più complesso, è possibile mantenere una connessione persistente tra il server e il client (tramite socket o simili), che manterrebbe la nota dello stesso. Meno chiamate dal client, un po 'più complesse da configurare. Vedi http://www.kirupa.com/developer/flash8/php5sockets_flash8.htm per le informazioni di base sui flash + socket.
  4. Dato che si sta lavorando con Flash, è possibile esaminare gli oggetti locali condivisi (cookie flash) per memorizzare lo stato. È ancora possibile perdere l'evento di scaricamento, ma almeno il cookie viene mantenuto in tutte le sessioni del browser e i tipi di browser.

L'opzione 3 è la migliore IMHO.

+0

1. Immagino che non funzionerà su più browser sul computer client. –

+0

Ho pensato di usare anche i cookie, ma poi ho anche riscontrato dei problemi se lo usavo. La tua terza opzione suona meglio, ma non ho idea di come iniziare, voglio dire implementarla. Potresti essere più specifico sulla terza opzione ?? – webdever

+0

@Kumar: hai una soluzione migliore? – webdever

0

Se si desidera impedire l'accesso con 2 accessi diversi, è possibile imporre una regola che blocca una determinata risorsa.

L'IP del client potrebbe essere una di queste risorse bloccabili: è consentita una sola sessione per un dato indirizzo IP. Ciò ridurrebbe l'inganno alle persone che hanno più indirizzi IP pubblici. Le persone che condividono l'IP pubblico tramite proxy avrebbero un problema.

Non vedo quale altra risorsa bloccabile è possibile utilizzare facilmente.

+0

Sì, avrei proposto questa idea al mio cliente. Bcuz vogliono modellare come fa il clubpenguin, cioè quando entri nella pagina, nemmeno nella pagina di login, ti chiedono il messaggio e ti chiedono di chiudere qualsiasi browser/scheda che lo apra. – webdever

+0

E le persone dietro i firewall, dove appaiono tutte sotto lo stesso indirizzo IP esterno? – Marcus

+0

Oh sì ... Quasi dimenticato di questo.Gli IP non sono molto affidabili .. – webdever

7

Ogni volta che si fornisce la pagina flash all'utente, generare un token casuale. Incorpora questo token da qualche parte nella pagina, ad esempio come FlashVar. Inoltre, memorizza il token generato più di recente nella sessione dell'utente.

Ogni volta che il flash invia qualcosa al server, pubblica anche il token. Se il token non corrisponde al token memorizzato nella sessione, rifiuta il post.

In questo modo, solo la versione della pagina generata più di recente avrà la capacità di comunicare con il server e se l'utente apre più versioni della pagina, solo le più recenti funzioneranno.

Questa tecnica dovrebbe funzionare anche se l'utente apre altri browser su altre macchine. Non usa gli indirizzi IP per stabilire l'identità. E non vi è alcuna possibilità che un utente venga in qualche modo "bloccato" in modo permanente perché ogni volta che riapre la pagina si ripristina il token memorizzato.

È un'idea simile al modo in cui alcuni framework inseriscono un token di convalida in moduli per impedire gli attacchi .

-1

Soluzione:

di risposta ai vostri clienti richiesta con un no, perché tu sei il guru web design che sa cosa è il migliore per i visitatori del cliente. il sito web non deve fare appello al tuo cliente ma ai visitatori del cliente. e quando sono limitati così duramente sui loro computer sono tutt'altro che soddisfatti.

+0

-1: "Questo non è utile" –

2

provare usando il codice seguente:

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 
    } 
    }; 

Il codice limita l'utente ad aprire una scheda del browser alla volta e durante l'aggiornamento del browser (scheda corrente) il codice non mostrerà alcun avviso. Copia che copia lo stesso URL in una nuova scheda non consentirà all'utente di aprire. per ulteriori informazioni prova this

Problemi correlati