Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di otello
    Registrato dal
    May 2003
    Messaggi
    296

    Connessione con stesso account

    Sapete dirmi come posso fare per evitare che due utenti si loggino con lo stesso account?
    Grazie 1000

  2. #2
    Utente di HTML.it L'avatar di otello
    Registrato dal
    May 2003
    Messaggi
    296
    Quote Originariamente inviata da otello Visualizza il messaggio
    Sapete dirmi come posso fare per evitare che due utenti si loggino con lo stesso account?
    Grazie 1000
    Forse sono stato troppo sintetico e comprendo l'assenza di una qualunque risposta.
    La mia necessità è questa: ho un programma in php al quale si accede con login e password. Mi succede che se un utente si collega con le sue credenziali e faccia l'accesso allo stesso programma dallo stesso computer con le stesse credenziali, le variabili di SESSION dell'una e dell'altra vengono mischiate ed i dati risultanti risultano errati. Già la cosa mi pare strana di per sè, perché ogni sessione dovrebbe essere identificata univocamente, ma comunque ho pensato di non permettere l'accesso con le stesse credenziali a più di un utente per volta, ma mi manca l'idea di come possa fare.
    Da qui la mia domanda... Grazie

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    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.

  4. #4
    Utente di HTML.it L'avatar di otello
    Registrato dal
    May 2003
    Messaggi
    296
    Grazie Alhazred,
    l'esempio che hai portato è chiarissimo ma, dopo averci riflettuto, non sembra calzare con il mio problema.
    Provo ad essere chiaro (ma non assicuro il risultato ).
    Io effettuo un accesso al DB e, con i dati letti, carico le variabili di "$_SESSION". Subito dopo apro un altra sessione di lavoro accedendo con lo stesso account. Accedo al db e carico altri valori nella $_SESSION. Poi ritorno al primo accesso e continuo il lavoro, ma i valori che ho nella $_SESSION non sono più quelli che avevo lasciato, perché sono stati sostituiti da quelli del secondo accesso.
    Mi spiego meglio: se con il primo utente avevo letto nome e cognome e li avevo riposti in $_SESSION dopo aver fatto l'accesso la seconda volta ed aver letto un altro nome e cognome e riposti nella $_SESSION, questi valori sostituiscono i primi per cui, ritornando sul primo utente, mi trovo modificati i valori che avevo (e non capisco perché dato che la SESSION è specifica per ogni accesso).
    Spero di essere stato chiaro.

    Una buona soluzione mi è sembrata quella di non permettere l'accesso simultaneo a più utenti con le stesse credenziali, un'altra potrebbe essere quella di eliminare la sessione precedente qualora un utente si logghi con le stesse credenziali. In entrambe i casi ho qualche difficoltà a capire come fare.
    L'ultima soluzione sarebbe quella di azzerare la $_SESSION all'occorrenza, ma è una soluzione che vorrei evitare dato l'uso molto spinto che faccio di questa funzione il che creerebbe notevoli difficoltà.
    Grazie
    Ultima modifica di otello; 17-03-2018 a 15:27

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.