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!