Gestione progetto aperture contemporanee

di il
1 risposte

Gestione progetto aperture contemporanee

Buongiorno a tutti,

sto sviluppando una web app utilizzando PHP, Javascript e MySql come DB.
L'applicazione permette lo sviluppo di business plan, l'operatore all'avvio della webapp può decidere se aprire un nuovo progetto oppure continuarne uno tra quelli esistenti.
Fatta la scelta avrò un ID_progetto salvato nella sessione che verrà utilizzato in tutte le pagine come riferimento.

Le mie problematiche sono in sostanza 2:
1) la gestione di pagine aperte in più schede: se l'utente cambia progetto senza chiuderle prima ci sarebbero sicuramente problematiche in quanto i dati nelle pagine ancora aperte fanno riferimento al progetto precedente e se faccio delle modifiche e poi salvo l'ID_progetto che passo è quello nella $_SESSION che è nuovo. L'unica idea per quanto forse brutta è quella di salvare l'ID_progetto in una variabile javascript all'apertura della pagina e quando si lancia qualsiasi elaborazione della pagina fare un confronto se l'ID della variabile è uguale all'ID della sessione e in caso contrario bloccare l'esecuzione.
Il top sarebbe se ci fosse una callback al rientro in una pagina in modo da fare subito il controllo e capire se quella pagina e "vecchia".

2)la gestione di accesso contemporaneo allo stesso progetto: anche in questo caso il problema è legato alla modifica dei dati ma questa volta causata da due utenti divesi che però operano sulle stesse righe del DB.
Non è possibile utilizzare il lock perchè sarebbero troppe tabelle coinvolte e comunque le tabelle ospitano svariati progetti quindi bloccheri l'intera applicazione.
Per tenere "traccia" del progetto aperto un modo l'avrei trovato, posso segnare l'id_utente nella tabella progetti in una colonna apposita.
Il mio problema in questo caso è capire quando "liberare" il progetto perchè l'utente potrebbe anche non fare un log off ma semplicemente chiudere il browser.

Mi potete dare delle dritte sui metodi utilizzati in questi casi? Non saprei cosa scrivere su web per trovare guide / indicazioni per gestire la cosa.
Anche link di articoli o qualsiasi cosa tratti delle elaborazioni per gestire situazioni come queste mi andrebbero bene, l'importante è avere qualcosa da cui partire per fare un ragionamento.

Grazie molte!

1 Risposte

  • Re: Gestione progetto aperture contemporanee

    Eranius ha scritto:


    Le mie problematiche sono in sostanza 2:
    1) la gestione di pagine aperte in più schede
    Mi sembra un meccanismo molto farraginoso da gestire: a mio avviso, è meglio appoggiarsi alla base dati salvando progressivamente le informazioni per un progetto che si potrebbe definire "transiente", ovvero che figura e viene gestito come "temporaneo", ma i cui dati non stanno in sessione bensì al sicuro su database.

    Quando si aprono diverse schede, ciò avverrà operando una selezione specifica su un link che dovrà sempre riportare l'ID del progetto (confermato o transiente che sia) su cui si deve lavorare. E' ovvio che se il progetto subisce evoluzioni in un tab e un altro tab rimane indietro, questo debba essere aggiornato per poter riprende le attività, ma si tratta di una problematica del tutto normale e conosciuta anche dagli utenti: non vedo cosa potrebbe accadere di sbagliato.

    Eranius ha scritto:


    2)la gestione di accesso contemporaneo allo stesso progetto
    Anche questa gestione ti causerà più mal di pancia che vantaggi: meglio gestire il tutto lasciando che si possa intervenire sul progetto da più utenti, altrimenti sfuma uno dei vantaggi di realizzare un'applicazione Web.

    Al massimo potresti procedere così: invece di "liberare" il progetto quando l'utente fa il logout, scrivi codice JavaScript che ogni 10-20-30 secondi (la scelta dipende da te) invii un "ping" al server per aggiornare i campi relativi all'utente che sta lavorando al progetto salvando anche il timestamp (la data/ora corrente). Fino a quando la pagina è attiva e opera sul progetto, il "ping" continua a essere inviato e quindi se il valore data/ora salvato è inferiore al limite di secondi prestabilito rispetto alla data/ora corrente, significa che l'utente è attivo. Se invece l'utente chiude il tab, o chiude la pagina o il browser intero, il "ping" non parte più e quindi la data/ora non viene aggiornata: scaduto il tempo impostato come intervallo per il "ping" significa che il progetto è "libero", ovvero l'utente non sta modificando in quel momento il progetto.

    Con questa soluzione, al netto di dover inviare periodicamente una chiamata al server, puoi segnalare l'operatività degli utenti (opzionalmente indicando pure l'utente e altre informazioni di dettaglio), senza doverti preoccupare che permangano blocchi indesiderati (almeno non oltre il periodo di intervallo prestabilito per l'aggiornamento di questo stato).

    Ciao!
Devi accedere o registrarti per scrivere nel forum
1 risposte