Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: Sessione Unica

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    6

    Sessione Unica

    Ciao a tutti
    si parla di sessione unica su un server.
    Il problema, come al solito, è la chiusura accidentale del browser, che mi fa restare attiva la sessione.
    La domanda è: non volendo aspettare il timeout a 15 minuti, come si può fare in modo che all'atto della successiva autenticazione dell'utente rimanga sempre una
    e una sola sessione sul server???

    Io stavo pensando che ogni volta che c'è un tentativo di login con user e pwd si deve fare controllo sull'id session(user e pwd) che devo conservare sul DB nella sessione. Quindi se sono presenti sul DB si uccide la sessione presente e si crea, subito dopo, una nuova sessione. Che ne dite? SI potrebbe fare?

    PS Esiste qualche sito che gestisce la sessione unica?

  2. #2
    Ciao, la tua idea è buona ma ci sono soluzioni piu eleganti ed efficenti che ti permettono di ottenere lo stesso risultato.
    Per esempio puoi usare una struttura dati resisdente in memoria centrale, che sicuramente è piu efficente del DB. Se utilizzi le tecnologie Java lato server, per esempio, puoi far riferimento a questo url http://programmarejava.blogspot.com/

  3. #3
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797

    Re: Sessione Unica

    Originariamente inviato da puyer
    Ciao a tutti
    si parla di sessione unica su un server.
    Il problema, come al solito, è la chiusura accidentale del browser, che mi fa restare attiva la sessione.
    La domanda è: non volendo aspettare il timeout a 15 minuti, come si può fare in modo che all'atto della successiva autenticazione dell'utente rimanga sempre una
    e una sola sessione sul server???

    Io stavo pensando che ogni volta che c'è un tentativo di login con user e pwd si deve fare controllo sull'id session(user e pwd) che devo conservare sul DB nella sessione. Quindi se sono presenti sul DB si uccide la sessione presente e si crea, subito dopo, una nuova sessione. Che ne dite? SI potrebbe fare?

    PS Esiste qualche sito che gestisce la sessione unica?
    ma se l'utente chiude il browser la sessione non sparisce?
    non ho molto chiaro quello che tu vuoi, ma se ad esmpio faccio un login che rimane immagazinato in sessione, se chiudo il browser alla successiva riapertura non sono più loggato.

  4. #4
    Se chiudi il browser la sessione non sparisce automaticamente. E' necessario effettuare sempre il 'logout' esplicitamente prima di chiudere il browser e ogni buon applicazione web che si rispetti dovrebbe permettere di farlo attraverso un link apposito. La sessione scade solo dopo un certo timeout, in genere configurabile sul web server per ogni singola applicazione, e solo allora viene rimossa dal server se ovviamente il client non richiede il 'logout' esplicitamente prima della scadenza di tale timeout. Altrimenti come ti spieghi che quando accedi alla home di google ed effettui l'accesso vieni riconosciuto anche dopo che chiudi e riapri la home stessa di google?

  5. #5
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    Originariamente inviato da Santinizer
    Se chiudi il browser la sessione non sparisce automaticamente. E' necessario effettuare sempre il 'logout' esplicitamente prima di chiudere il browser e ogni buon applicazione web che si rispetti dovrebbe permettere di farlo attraverso un link apposito. La sessione scade solo dopo un certo timeout, in genere configurabile sul web server per ogni singola applicazione, e solo allora viene rimossa dal server se ovviamente il client non richiede il 'logout' esplicitamente prima della scadenza di tale timeout. Altrimenti come ti spieghi che quando accedi alla home di google ed effettui l'accesso vieni riconosciuto anche dopo che chiudi e riapri la home stessa di google?
    emm.. google credo utilizzi i cookies.. le sessioni penso scadano. o almeno, quando ho fatto i progetti io scadevano tt.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    6
    Originariamente inviato da Santinizer
    Ciao, la tua idea è buona ma ci sono soluzioni piu eleganti ed efficenti che ti permettono di ottenere lo stesso risultato.
    Per esempio puoi usare una struttura dati resisdente in memoria centrale, che sicuramente è piu efficente del DB. Se utilizzi le tecnologie Java lato server, per esempio, puoi far riferimento a questo url http://programmarejava.blogspot.com/

    Ciao Santizer,
    innanzitutto grazie per la risposta e per il link che studierò approfonditamente anche se non sono un bravo programmatore...Il mio requisito, purtroppo, è avere la certezza che ci sia un solo utente con quella user id e password all'interno dell'applicazione. Questo deriva dal fatto che la password è a pagamento e si vuole evitare che ci siano più utenti che utilizzano la stessa password (quello che succede adesso).
    Ovviamente per colpa di questo requisito devo gestire la chiusura accidentale del browser (che credo si verifichi molto di frequente). Si era pensato inizialmente di intercettare l'evento "chiusura con la X", magari con un popmessage che poi chiede se si vuole davvero chiudere la sessione, ma leggendo nei forum questa tecnica non è sicura al 100%.
    Non mi rimane altro che cercare di fare un accrocco tra quello proposto da me e quelo che mi consigli tu.
    Credo non mi basti la username per identificare la sessione (di solito mettono i codici fiscali), quindi devo associargli una password e fare in modo che la id session sia univocamente identificata dalla chiave (user, password).
    Se hai qualche altro consiglio non esitare a scrivermi.
    Ciao e grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    6
    Scusa, un'altra cosa, per la struttura dati in memoria centrale ho dei dubbi.
    Tieni conto che sto parlando di un applicazione web che gestisce migliaia di sessioni (si sono toccate punte anche di 50.000) contemporanemaente.
    Ciao

  8. #8
    Il caso della coppia (username, password) può essere ricondotto al caso di considerare solo la username (basta effettuare una concatenazione delle stringhe per ottenerne una sola).
    Comunque la soluzione che ti ho illustrato serve piu che altro ad invalidare le sessioni inutili sul server e non propriamente a gestire il tuo problema. Per capire se un utente è gia loggato al sistema una soluzione potrebbe essere quella di aggiungere semplicemente alla tabella degli utenti, quella in cui tieni traccia di username e password, una flag che indica lo stato di ogni singolo utente (loggato/non-loggato) e aggiornarlo in maniera opportuna al login e logout dell'utente. Ovviamente quando arriva una richiesta il server la accetta ed apre una nuova sessione solo se lo stato di quell'utente è non-loggato. Certamente il problema rimane se l'utente chiude il browser accidentalmente; intercettando l'evento chiusura della finestra tramite javascript potresti effettuare una richiesta di logout in background, il che funziona solo se l'utente ha abilitato javascript... In questo caso rischieresti il problema opposto, che la coppia (username, password) rimanga bloccata e nessuno può piu usarla, nemmeno il leggittimo proprietario! Potresti aggirare il problema facendo in modo di richiedere la password all'utente se e solo se la richiesta arriva senza cookie.

    Se la tua applicazione prevede la presenza di molte sessioni attive contemporaneamente ti conviene usare la soluzione del DB.

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    6
    Originariamente inviato da Santinizer
    Il caso della coppia (username, password) può essere ricondotto al caso di considerare solo la username (basta effettuare una concatenazione delle stringhe per ottenerne una sola).
    Comunque la soluzione che ti ho illustrato serve piu che altro ad invalidare le sessioni inutili sul server e non propriamente a gestire il tuo problema. Per capire se un utente è gia loggato al sistema una soluzione potrebbe essere quella di aggiungere semplicemente alla tabella degli utenti, quella in cui tieni traccia di username e password, una flag che indica lo stato di ogni singolo utente (loggato/non-loggato) e aggiornarlo in maniera opportuna al login e logout dell'utente. Ovviamente quando arriva una richiesta il server la accetta ed apre una nuova sessione solo se lo stato di quell'utente è non-loggato. Certamente il problema rimane se l'utente chiude il browser accidentalmente; intercettando l'evento chiusura della finestra tramite javascript potresti effettuare una richiesta di logout in background, il che funziona solo se l'utente ha abilitato javascript... In questo caso rischieresti il problema opposto, che la coppia (username, password) rimanga bloccata e nessuno può piu usarla, nemmeno il leggittimo proprietario! Potresti aggirare il problema facendo in modo di richiedere la password all'utente se e solo se la richiesta arriva senza cookie.

    Se la tua applicazione prevede la presenza di molte sessioni attive contemporaneamente ti conviene usare la soluzione del DB.

    C'è solo un dubbio. Mi ricollego a quando dici che quando arriva una richiesta il server la accetta ed apre una nuova sessione solo se lo stato di quell'utente è non-loggato. Se invece facessi in modo di accettare sempre la richiesta, anche quando l'utente è gia loggato...l'unico inconveniente è che dovrei chiudere la sessione rimasta appesa dalla chiusura precedente accidentale del browser---
    Gli scenari possibili sono:

    1. l'utente chiude il browser con la X e subito dopo si ri-logga, effettuando di fatto la chiusura della sessione rimasta apesa (tipo un login preceduto da un logout). In realtà di potrebbe anche chiedere se intende chiuderla o continuare la precedente?
    2. L'utente cerca di aprire due sessioni contemporaneamente (cosa che devo assolutamente impedire)...e non ci riuscirebbe.
    Altro? Che ne dici?
    Scusa se ti faccio queste domande, ma sei l'unico che mi ha risposto.
    Grazie comunque

  10. #10
    Originariamente inviato da puyer
    Se invece facessi in modo di accettare sempre la richiesta, anche quando l'utente è gia loggato...l'unico inconveniente è che dovrei chiudere la sessione rimasta appesa dalla chiusura precedente accidentale del browser---
    in http://programmarejava.blogspot.com/ la soluzione descritta fa proprio questo, però tieni conto del fatto che la seconda richiesta puo essere fatta da un secondo client che invalidando la sessione del primo non fa altro che creargli problemi; se a sua volta il primo client rieffettua l'accesso invalida la sessione del secondo e cosi via in modo ciclico... Invece tu devi fare in modo che il primo che usa una coppia (utente/password) sia l'unico a poterlo fare, come se mettesse un lock. Quindi basta semplicemente rifiutare la richiesta di un cliente che usa una coppia (username,password) che risultano gia usate. Adesso che ci penso, per quanto riguarda poi il discorso DB-memoria centrale tieni conto del fatto che nella struttura dati tu copi il riferimento della sessione, quindi anche se le sessioni fossero 100.000 il problema non si pone o almeno l'utilizzo della struttura dati non costituisce il collo di bottiglia... Poi non so quali tecnologie lato server usi tu (io parlo di java e non conosco bene le altre). Per quanto riguarda la chiusura accidentale del browser puoi usare javascript per richiedere il logout o, come ti dicevo, fare in modo che il server riconosca la sessione da associare al client attraverso i cookie ricevuti con la richiesta (in java puoi usare il test request.getSession(false)!=null ), che ovviamente l'utente non dovrebbe cancellare dopo la chiusura del browser. Quando ho un pò di tempo aggiorno il blog per il problema da te definito che credo sia abbastanza diffuso.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.