E' difficile dare una risposta a questa domanda, si tratta di un argomento complesso e ci sono una marea di casi da considerare.
Prima di tutto: sei sicuro che siano le sessioni ad andare in conflitto e non l'esecuzione di operazioni che modificano lo stato dei dati che interessano l'utente?
Non so cosa tratti nella tua applicazione, ma ad esempio:
- 1° login: recupera dal db il valore di un campo numerico, diciamo 5, e lo mette in sessione
- 2° login: esegue un'operazione sul db che modifica quel dato e lo porta ad esempio a 7
- 1° login: esegue una nuova operazione usando il valore in sessione (5) e l'operazione da un esito imprevisto perché tale valore è invece 7 nel db
in questo scenario non c'è alcun conflitto tra le sessioni, ogni sessione ha i dati corretti, ma sono inconsistenti con il contenuto del DB.
Come si risolve?
Se il caso è questo: basta che prima di eseguire operazioni sensibili verifichi la consistenza dei dati che hai in sessione.
Esempio classico che si usa in questi casi per spiegare:
siamo su un e-commerce
- utente 1 vede un prodotto che gli piace, ne restano 5 unità, ne mette 3 nel carrello e prosegue la navigazione
- utente 2 vede lo stesso prodotto, ne mette 3 nel carrello e conclude l'acquisto
- utente 1 finisce di cercare prodotti, va nel carrello e conclude l'acquisto
ora c'è un problema, utente 1 ha comprato 3 unità del prodotto, ma il negozio ne aveva 2 disponibili, dove sta l'errore?
L'errore sta nel fatto che, prima di concludere l'ordine, il sistema deve verificare di nuovo la disponibilità, perché è un valore che può essere modificato dall'azione di utenti diversi.
Nel tuo caso non hai 2 utenti diversi, ma lo stesso utente con 2 accessi eseguiti, ma la teoria è la stessa.
Per evitare problemi dipendenti da accessi multipli con lo stesso account puoi anche pensare di salvare i dati modificabili e che potenzialmente possono generare errori in caso di inconsistenza in una tabella del db, in modo che tutte le istanze di accesso vedano gli stessi dati perché li leggono dal db che è condiviso e non dalla sessione che è specifica per ogni accesso.

Rispondi quotando