È opportuno fare affidamento sul fatto che lo stato non esiste per gli altri utenti che arrivano allo stesso indirizzo?

2

Sto scrivendo un'app web. Voglio che gli utenti siano in grado di accedere a un URL e avviare una nuova "sessione" della mia app. Possono Slack i loro amici / colleghi l'URL e quindi tutti sono in uno scenario collegato al socket in cui il mittente può porre domande al gruppo, che può rispondere in modo anonimo.

In questo momento, inizializzo il tipo di utente in modo tale che la persona che ha avviato la sessione possa porre le domande. Stavo pensando al fatto che andare allo stesso URL in una scheda diversa non avrebbe avuto quel processo di inizializzazione, e quindi avrei potuto fare ogni genere di cose in modo diverso (interfaccia utente, ecc.). Sto iniziando a chiedermi se c'è di meglio quale è il modo migliore per farlo.

Vorrei che gli utenti non dovessero accedere, a meno che alla fine non vogliano salvare i loro risultati. Inoltre non so esattamente come (se?) Le attuali sessioni del server giochino su questo.

Ho qualcosa che genera una stringa casuale che diventa il percorso dell'applicazione con ogni sessione appena aperta. Speravo che sarebbe stato il modo di tenere le persone / le cose separate.

Sto usando React, Redux e Socket.io. Quello che speravo era che aprire un URL in una seconda scheda avrebbe fatto cose come aumentare un contatore del numero di utenti, ecc. Ma lo stato ovviamente non c'è, quindi la spada a due tagli mi uccide e ho bisogno di un qualche tipo di altra soluzione: sto usando la spaziatura dei nomi con Socket.io.

Modifica

Non uso più socket.io name-spacing e sto usando la funzione "rooms" nativa di socket.io. In realtà ho fatto in modo che tutto funzionasse sulla mia macchina (in grado di avere più schede ma stanze diverse e la stanza conta in modo appropriato aggiornamento ecc.). Tuttavia, non ho ancora ottenuto con successo alcuna funzionalità di socket che funzioni sul sito ospitato, quindi sono abbastanza che questo non sia finito. (Piuttosto nuovo a questo.) Aggiornerà di nuovo post quando ne saprò di più. Grazie per le fantastiche risposte finora.

    
posta James 23.09.2017 - 05:44
fonte

2 risposte

1

Ti ho sentito dire che due schede che visitano il tuo servizio dovrebbero essere come i browser di due host, dovrebbero essere tenute separate.

going to the same URL in a different tab ...

È possibile distinguere i client in base a una combinazione di IP di origine, URL e cookie. Non vedo nulla di diverso quando apro una nuova scheda sullo stesso vecchio URL. (A proposito, nota che puoi controllare i parametri dell'URL oi cookie per "freschezza", per timestamp recenti.)

Ecco il mio suggerimento. Dopo aver ricevuto un GET per un URL di "rendez-vous address", rifiutare di servirlo direttamente, anziché 302 per un URL di "indirizzo di servizio", forse uno che include un nonce come un GUID casuale. Quindi, quando qualcuno apre la prima scheda del browser per iniziare a chattare, e in seguito apre la seconda scheda, terminano con casualità e possono essere distinte dai loro URL. Diverse schede all'interno del cookie offriranno ovviamente cookie identici, quindi i cookie non aiutano molto a distinguere tra le schede.

Potresti giocare con l'ambito dei cookie, ma sembra non necessario. La regolazione dell'URL di ciascuna scheda su un valore univoco dovrebbe essere sufficiente.

    
risposta data 26.09.2017 - 05:51
fonte
1

Non sono sicuro di cosa stai chiedendo, ma ecco alcuni approcci che puoi prendere in base a ciò che penso potresti chiedere.

Identifica diversi utenti su macchine diverse

Per identificare diversi utenti su macchine diverse, è sufficiente assegnare loro una sorta di ID casuale e memorizzare tale ID utilizzando una combinazione di cookie e archivio locale / sessionestorage. Probabilmente è possibile trovare alcune librerie là fuori che possono determinare se i cookie sono abilitati e fallback a localstorage / sessionstorage se necessario. Per quanto riguarda le angolazioni, credo che questo sia la libreria che uso.

Identifica lo stesso utente sulla stessa macchina / browser ma schede diverse

Anche l'uso dei cookie e / o lo stoccaggio locale / lo spazio per le sessioni funziona bene. Questi valori sono condivisi tra le schede. Sarai in grado di determinare quale utente ha iniziato la conferenza e mostrare loro la schermata del coordinatore anche se si chiudono fuori dalla scheda e la riaprono.

Identifica diversi utenti sulla stessa macchina / browser ma schede diverse

Questo non ha molto senso. Perché gli utenti dovrebbero utilizzare lo stesso computer per chattare? Questo sembra essere quello che stai chiedendo, però. Se si desidera eseguire questa operazione per qualche motivo, non assegnare all'utente alcun cookie (o le variabili localstorage / sessionstorage). Supponiamo che ogni scheda sia un nuovo utente. Per realizzare questo e identificare ancora l'utente, è possibile generare un ID nella scheda e inviarlo a socket.io a scopo di identificazione.

Identifica lo stesso utente su macchine diverse

Senza richiedere agli utenti di accedere o fornire una sorta di informazioni identificabili univoche, questo è quasi impossibile. Senza richiedere agli utenti di accedere, è possibile fornire ID univoci per ciascun utente (simile a come Go2Meeting gestisce l'identificazione degli utenti) o richiedere un'e-mail (o altra forma di identificazione) quando si entra nella stanza. Quest'ultima non è una cattiva idea se si tratta di un business in cui si desidera sollecitare gli utenti con e-mail che ricordino loro di utilizzare il prodotto.

Hai anche detto di non sapere se hai bisogno di un server. Dato che stai usando socket.io, è possibile evitare il server dopo aver inizialmente configurato la stanza; tuttavia, prima di quello dovresti usare il server per determinare quale vista l'utente dovrebbe vedere (usando un modo per identificarli elencato sopra).

Se sei disposto a fornire al coordinatore un URL diverso per gli altri membri (ad esempio https://communicate.io/12345#coordinator rispetto a https://communicate.io/12345 ), il tuo lavoro potrebbe effettivamente diventare più semplice. Puoi facilmente distinguere tra il coordinatore e gli altri membri in base all'URL. Potresti ancora utilizzare i metodi sopra indicati per identificare gli utenti, se necessario a quel punto.

    
risposta data 26.09.2017 - 16:33
fonte

Leggi altre domande sui tag