Gestione sessione e persistenza dei dati

di il
11 risposte

Gestione sessione e persistenza dei dati

Salve,
per la simulazione di un ecommerce, vi è la necessità di implementare la gestione del carrello utente.
Il carrello deve essere reso persiste; pertanto, mediante JDBC mi interfaccio col db, gestito in MySQl, ove memorizzo il carrello.
A tal proposito, mia intenzione è di salvare il carrello nel db, solo nel momento in cui la sessione viene invalidata.
Quando la sessione viene terminata esplicitamente, ovvero mediante logout dell'utente, è facile implementare ciò che ho menzionato prima.
Il problema sussiste quando la sessione viene invalidata al termine dell'intervallo di tempo di vita, definito.
In conclusione, dopo questo super mega pippone che vi ho fatto, la mia domanda è la seguente: Quale sarebbe l'iter più corretto per identificare il timeout della sessione e di memorizzare, in seguito o poco prima che finisca, il carrello nel db?

11 Risposte

  • Re: Gestione sessione e persistenza dei dati

    Non è quello che hai chiesto ma per non perdere niente salverei il carrello ad ogni modifica ,in questo modo se per qualche motivo perdessi il carrello-lato-client ne avresti una copia completa nel db e l'utente potrebbe recuperare lo stato del suo carrello
  • Re: Gestione sessione e persistenza dei dati

    gian82 ha scritto:


    Non è quello che hai chiesto ma per non perdere niente salverei il carrello ad ogni modifica ,in questo modo se per qualche motivo perdessi il carrello-lato-client ne avresti una copia completa nel db e l'utente potrebbe recuperare lo stato del suo carrello
    Si, con questa soluzione renderei il carrello persistente, ma volevo evitarla.
    Ripeto il mio quesito, anche per chiarirlo ulteriormente a coloro che vorranno rispondere.
    Come è possibile effettuare una qualunque interazione con il db, al termine del tempo di vita dell'oggetto session?
    Nel mio caso specifico:
    ho un carrello con dei prodotti, il quale voglio rendere persistente;
    al fine di evitare numerose azioni di INSERT, UPDATE e DELETE, l'obiettivo è quello di effettuare un unico aggiornamento del db al termine della sessione dell'utente.

    Comunque, ti ringrazio per il feedback.
  • Re: Gestione sessione e persistenza dei dati

    Penso che tu ti riferisca alla session del web server ,se si sarebbe utile sarebbe utile sapere di quale webserver si tratti per vedere gli eventuali eventi legati alla session che potrebbero tornare utili
  • Re: Gestione sessione e persistenza dei dati

    gian82 ha scritto:


    Penso che tu ti riferisca alla session del web server ,se si sarebbe utile sarebbe utile sapere di quale webserver si tratti per vedere gli eventuali eventi legati alla session che potrebbero tornare utili
    Utilizzo Apache tomcat.
  • Re: Gestione sessione e persistenza dei dati

    Purtroppo non l'ho mai utilizzato ma proverei e vedere se trovi qualcosa di simile ad un evento "endsession" dell'oggetto session, i dati credo che potresti portarteli dietro nella stessa session , di doc se ne trova https://tomcat.apache.org/tomcat-5.5-doc/catalina/docs/api/org/apache/catalina/Session.html ,esistono utenti di questo forum che di java ne sanno parecchio magari potranno darti un suggerimento
  • Re: Gestione sessione e persistenza dei dati

    Premesso che una gestione del genere sarebbe particolarmente pericolosa e che sarebbe meglio la soluzione già proposta da gian82 (salvataggio SEMPRE in DB del carrello ad ogni variazione: del resto, il DB serve esattamente a questo), puoi comunque implementare un HttpSessionListener.
    Il metodo sessionDestroyed() viene richiamato dal container appena prima che la sessione venga distrutta, permettendoti di recuperare tutto ciò che c'è per farne ciò che vuoi.
  • Re: Gestione sessione e persistenza dei dati

    SpiritoLibero ha scritto:


    Premesso che una gestione del genere sarebbe particolarmente pericolosa e che sarebbe meglio la soluzione già proposta da gian82 (salvataggio SEMPRE in DB del carrello ad ogni variazione: del resto, il DB serve esattamente a questo), puoi comunque implementare un HttpSessionListener.
    Il metodo sessionDestroyed() viene richiamato dal container appena prima che la sessione venga distrutta, permettendoti di recuperare tutto ciò che c'è per farne ciò che vuoi.
    Ah grazie, ero convito che il metodo sessionDestroyed() venisse richiamato dopo l'eliminazione della sessione e pertanto non avessi più il riferimento all'oggetto session.
    Comunque, dato che ci troviamo: interagire con il db, come consigliato, per rendere persistente un'entità come il carrello, il quale potrebbe essere aggiornata più e più volte, da molteplici utenti, non rallenterebbe l'applicazione?
  • Re: Gestione sessione e persistenza dei dati

    Armen ha scritto:


    Ah grazie, ero convito che il metodo sessionDestroyed() venisse richiamato dopo l'eliminazione della sessione e pertanto non avessi più il riferimento all'oggetto session.
    No, la documentazione dice
    Receives notification that a session is about to be invalidated.
    (cioè, viene notificata quando la sessione sta per essere invalidata, quindi è ancora utilizzabile).
    Comunque, dato che ci troviamo: interagire con il db, come consigliato, per rendere persistente un'entità come il carrello, il quale potrebbe essere aggiornata più e più volte, da molteplici utenti, non rallenterebbe l'applicazione?
    E perchè mai? Un DBMS è in grado di reggere carichi di lavoro molto, molto alti. Nell'azienda per cui lavoro il sito e-commerce tiene mediamente 150 utenti collegati contemporaneamente e le operazioni che vengono fatte sul DB non si limitano certo all'interazione con le tabelle che regolano i carrelli (e non c'è solo il sito e-commerce che usa quel DB, anzi l'uso da parte del sito sarà sì e no del 20% rispetto all'uso totale)... ciò nonostante i banchmark del DBMS dicono che questo è usato meno del 20% delle sue capacità. Direi che le interazioni sono del tutto trascurabili.
  • Re: Gestione sessione e persistenza dei dati

    SpiritoLibero ha scritto:


    E perchè mai? Un DBMS è in grado di reggere carichi di lavoro molto, molto alti. Nell'azienda per cui lavoro il sito e-commerce tiene mediamente 150 utenti collegati contemporaneamente e le operazioni che vengono fatte sul DB non si limitano certo all'interazione con le tabelle che regolano i carrelli (e non c'è solo il sito e-commerce che usa quel DB, anzi l'uso da parte del sito sarà sì e no del 20% rispetto all'uso totale)... ciò nonostante i banchmark del DBMS dicono che questo è usato meno del 20% delle sue capacità. Direi che le interazioni sono del tutto trascurabili.
    Ah ok, grazie. Giusto per curiosità, che DBMS usate, se è possibile saperlo?
  • Re: Gestione sessione e persistenza dei dati

    Armen ha scritto:


    Ah ok, grazie. Giusto per curiosità, che DBMS usate, se è possibile saperlo?
    SQL Server
  • Re: Gestione sessione e persistenza dei dati

    Salve di nuovo,
    volevo chiedere se fosse possibile che all'avvio dell'applicazione venga creata una sessione di default.
    Chiedo ciò perché; usando il metodo sessionCreated() di HttpSessionListener, mi accorgo che all'avvio dell'applicazione viene creato un oggetto sessione, senza l'uso esplicito del metodo getSession().

    In caso affermativo, come dovrei gestire l'evento?

    L'obiettivo è quello di creare una sessione unicamente in seguito al login dell'utente.
Devi accedere o registrarti per scrivere nel forum
11 risposte