Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JSP] Impostare scadenza sessione

    Ciao ragazzi,
    sto provando a usare le sessioni e i cookie ma non trovo niente che spiega in maniera approfondita questo argomento. (Se avete qualche guida da consigliarmi accetto ben volentieri)
    Ho fatto un'applicazione web con login e interrogazione ad un db mysql. Vorrei impostare la scadenza della sessione e ho visto che in automatico il server lascia un cookie JIDSESSION sul client con la scadenza della sessione a "quando termina la sessione di navigazione".
    Come faccio a cambiare questo valore? Devo aggiungere un altro cookie con una nuova scadenza?
    Inoltre volevo chiedervi un'altra cosa. Sui libri che sto studiando e anche sulle guide che ho trovato in rete, sembra che gli esempi di collegamento ai database non prendano in considerazione la possibilità degli accessi multipli da parte di più utenti, potete darmi qualche info in merito?
    grazie a tutti

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Veramente no.
    Il cookie viene rilasciato se e solo se il browser li supporta, altrimenti viene solo aggiunto un parametro alla request (se richiesto, ovvero se c'è effettivamente una sessione attiva).

    Per impostare il tempo di sessione, c'è il metodo setMaxInactiveInterval() che permette di specificare il tempo (in secondi) massimo di inattività del client, oltre il quale la sessione viene fatta scadere.

    Se si vuole forzare la distruzione di una sessione, si deve richimare il metodo invalidate().

    Ovviamente, sto parlando dell'oggetto HttpSession che si recupera dalla request.

    Tieni sempre sotto mano la documentazione di JEE.

    codice:
    HttpSession s = request.getSession();
    s.setMaxInactiveInterval(2 * 60 * 60);   // La sessione scade dopo 2 ore
    Se voglio invalidare una sessione:

    codice:
    HttpSession s = request.getSession();
    s.invalidate();
    
    // Da questo momento il client non ha più una sessione attiva

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3

    ok grazie

    seguirò il tuo suggerimento.
    Per quanto riguarda la domanda sugli accessi ai db puoi darmi qualche info?
    grazie

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    In che senso non prendono in considerazione gli accessi multipli degli utenti?

    Se stai scrivendo una WebApplication, ci sono sostanzialmente 3 approcci possibili:

    1) La WebApplication possiede una ed una sola connessione al DB e tutti gli utenti usano quella connessione.

    2) La WebApplication apre una nuova connessione al DB per ciascun utente collegato

    3) La WebApplication possiede un pool di N connessioni aperte e, all'occorrenza, usa la prima libera

    In ogni caso, per il DB, l'utente che si connette è sempre uno solo: la WebApplication.

    L'approccio 1 va bene per piccole WebApplication con pochi utenti che effettuano sporadiche richieste al DB. Si crea una connessione e la si rende disponibile a tutti, piazzandola da qualche parte nel ServletContext. Quando un utente deve fare un'operazione che necessita di dati dal DB, si preleva la connessione dal ServletContext e la si usa.

    L'approccio 2 va bene per WebApplication con pochi utenti che fanno tante richieste al DB. Ogni volta che arriva un utente, si apre una connessione e la si usa per tutta la permanenza dell'utente all'interno dell'applicazione.

    L'approccio 3 va bene per WebApplication con tanti utenti, che generalmente non fanno tante richieste di dati da DB: quando un utente fa un'operazione che necessita di dati si prende la prima connessione libera del pool (se esiste), e la si rilascia quando è finita l'operazione, rendendola così disponibile per altri.

    Chiaramente vanno prese in considerazione le risorse a disposizione sul server: per gli approcci 2 e 3 servono macchine con tanta RAM.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5

    ...

    nel senso che i libri che ho io, spiegano solamente i passi per connettersi al database ma non spiegano gli approcci che tu hai elencato ne quindi ci sono esempi.
    Per un sondaggio mettono il seguente codice, ma funzionerebbe realmente se più utenti si connettessero sul server?
    codice:
    package controller;
    import java.sql.*;
    import javax.sql.*;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     *
     * 
     */
    @WebServlet(name = "sondaggioServlet", urlPatterns = {"/sondaggioServlet"})
    public class sondaggioServlet extends HttpServlet {
    
        /**
         * Processes requests for both HTTP
         * <code>GET</code> and
         * <code>POST</code> methods.
         *
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter(); 
            int value = Integer.parseInt(request.getParameter("squadra"));
                
            try {
                    Class.forName("com.mysql.jdbc.Driver");
                    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1?user=root&password=root");
                 // Crea un oggetto Statement
                    Statement stmt = con.createStatement();
                    String query = "UPDATE Sondaggio SET Voti = Voti + 1 " 
                            + "WHERE ID = " + value;
                    stmt.executeUpdate(query);
                    
                    // ottengo il totale dei voti
                    query = "SELECT sum(Voti) FROM Sondaggio";
                    ResultSet totalRS = stmt.executeQuery(query);
                    totalRS.next();
                    int total = totalRS.getInt(1);
                    
                    //ottengo risultati
                    query = "SELECT * FROM Sondaggio ORDER BY Voti DESC";
                    ResultSet resultRS = stmt.executeQuery(query);
                              
                                          
                /* TODO output your page here. You may use following sample code. */
                out.println("<html>");
                out.println("<head>");
                out.println("<title>Risultati Sondaggio</title>");            
                out.println("</head>");
                out.println("<body>");
                out.println("<h1>Chi Vincerà il Campionato?</h1>");
                out.println("
    
    ");
                out.println("
    
     Risultati:<pre>");
                out.println("</p>");
                
                
                //elabora risultati
                int votes;
                int percent;
                while (resultRS.next()) {
                    out.print(resultRS.getString(2));
                    out.print(":");
                    votes  = resultRS.getInt(3);
                    percent =  (votes*100)/total;
                    out.print(percent);
                    out.print("%");
                    out.print(" Risposte:");
                    out.println(votes);
                }
                out.println();
                out.print("Voti Totale:"); 
                out.println(total);        
                out.println("
    
    Grazie per aver partecipato!");
                out.println("</pre></body>");
                out.println("</html>");
                out.close();
                con.close();
                stmt.close();
                totalRS.close();
                resultRS.close();
            } catch (Exception e)    {
                out.println("<html>");
                out.println("<head>");
                out.println("<title>ERROR</title>");            
                out.println("</head>");
                out.println("<body>");
                out.println("<h1>Errore: " + e.getMessage() + "<h2>");
                out.println("Riprova più tardi. </body></html>");
                out.close();
            }
               
            
        }
    grazie per le risposte...non ti scoccio più

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Certo che funzionerebbe... il codice all'interno del metodo processRequest() viene eseguito da ciascun utente connesso (ci sarà un thread per ciascun utente, che esegue quel metodo). Quindi, ci saranno tante connessioni verso il server quanti sono gli utenti che sono connessi alla WebApplication.

    Inoltre, finita l'elaborazione di quel metodo la connessione viene correttamente chiusa, quindi non rimangono connessione "appese" sul database.

    Quello è l'approccio 2.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7

    ok

    bene a sapersi
    sei stato gentilissimo
    grazie
    ciao

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.