Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    26

    Contatore di accessi con l'uso dei Cookies

    Sao a tutti... sto cercando di realizzare un contatore di accessi usando i cookie, ecco il codice:

    package cookie;

    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class Prova extends HttpServlet {
    @Override
    public void service(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {

    res.setContentType("text/html");
    PrintWriter out = res.getWriter();



    Cookie[] cookies = req.getCookies();
    int counter = 1;
    Cookie cookie = null;
    if (cookies.length > 0) {
    int i = 0; boolean found = false;
    while (i < cookies.length && !found) {
    cookie = cookies[i];
    if ((cookie.getName()).equals("PersonalCounter")) {
    counter = (new Integer(cookie.getValue())).intValue() + 1;
    cookie.setValue(counter+"");
    found = true;
    }
    }
    if (!found) {
    cookie = new Cookie("PersonalCounter", "1");
    }
    }
    else {
    cookie = new Cookie("PersonalCounter", "1");
    }
    res.addCookie(cookie);




    out.println(counter);
    }
    }


    Non mi da nessun errore, il problema e che quando vado a richiamare la servlet si blocca senza stampare nulla. Grazie in anticipo.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    26

    ..

    Qualcuno può aiutarmi?

  3. #3
    All'interno del ciclo while devi incrementare il valore del contatore i, altrimenti il cookie preso in considerazione è sempre quello in posizione i=0 e la computazione va in loop infinito.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    26

    thanks

    E se invece volessi usare le session invece dei cookie? ho scritto così:

    String body; Integer n;
    res.setContentType ("text/html");
    PrintWriter out = res.getWriter();
    out.println ("<html>"); out.println ("<head");
    out.println ("<title>Numero visite</html>");
    out.println ("</head>"); out.println ("<body");
    HttpSession ses = req.getSession(true);

    if (ses.isNew()) {
    n = new Integer(1); body = "Benvenuto!";
    }else {
    n = (Integer)ses.getAttribute("visite");
    n = new Integer (n.intValue()+1);
    body = "Questa è la tua visita numero " + n;
    }

    ses.setAttribute ("visite", n);
    out.println (body);


    }

    }

    soltanto che mi da sempre problemi in ses.isNew();...io devo dire che se la sessione è nuova incremento, altrimenti nada...eppure non funge...

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    @pupys87
    Per favore, quando posti del codice, postalo indentato all'interno degli appositi tag CODE previsti dal forum e imposti dal regolamento (punto 6).

    Non ho potuto sistemare i tuoi precedenti post perchè il codice non è comunque indentato.


    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

  6. #6
    Modifica la condizione che verifichi nell'if. E' meglio usare:
    Codice PHP:
    if (ses.getAttribute("visite")==null) {...}else{...} 
    per evitare un possibile NullPointerException dovuto alla mancanza dell'oggetto 'visite' nella sessione. Controlla anche la chiusura dei tag nel codice che hai postato, per esempio "<head>" e non "<head" e ricorda di chiudere il "<body>" e "<html>" (se vedi la pagina bianca sul browser io ti consiglio sempre di vedere il sorgente HTML generato per capire se ci sono errori) e valuta se non sia il caso di usare una JSP.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Aggiungo anche la mia: sia le sessioni che i cookies non sono propriamente indicati per l'implementazione di un solido contatore di accessi. Le sessioni perché scadono (questione di minuti, se la pagina non viene aggiornata) e i cookies perché possono essere cancellati. Ora è chiaro che se il sito non prevede una registrazione, non ti resta altro che utilizzare i cookies (o le sessioni, con le limitazioni di cui sopra)...altrimenti sbatti tutto in database che è la cosa migliore.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    26

    ...

    Scusa Lele comunque il codice completo è:

    package cookie;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;


    public class Conta extends HttpServlet {

    public void doGet (HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {


    String body; Integer n;
    res.setContentType ("text/html");
    PrintWriter out = res.getWriter();
    out.println ("<html>"); out.println ("<head");
    out.println ("<title>Numero visite</html>");
    out.println ("</head>"); out.println ("<body");
    HttpSession ses = req.getSession(true);

    if (ses.isNew()) {
    n = new Integer(1); body = "Benvenuto!";
    }else {
    n = (Integer)ses.getAttribute("visite");
    n = new Integer (n.intValue()+1);
    body = "Questa è la tua visita numero " + n;
    }

    ses.setAttribute ("visite", n);
    out.println (body);


    }

    }


    Hmm quinsi santi, tu dici di mettere session==null invece del metodo isNew()?...


    Mentre Andrea, si è normale...poi le visite le inserito all'interno di un database...però se non metto una session o un cokie e inserisco direttamente nel DB, se l'utente aggiorna la pagina, il campo intero all'intero di MYSQL s'incrementa sempre e non va bene, io invece devo fare in modo che l'utente anche se non è loggato, pur se aggiorna la pagina il suo accesso incrementa una sola volta il campo del db^^

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Re: ...

    Originariamente inviato da pupys87
    Scusa Lele comunque il codice completo è:
    E i tag CODE?
    E l'indentazione del codice?




    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

  10. #10

    Re: ...

    Originariamente inviato da pupys87
    Hmm quinsi santi, tu dici di mettere session==null invece del metodo isNew()?...
    'HttpSession ses = req.getSession(true);' genera, se gia non c'è, una nuova sessione perche hai usato il parametro 'true' quindi la sesisone è sempre != null.
    Intendevo dire con il controllo che ti ho consigliato che a te non interessa che la sessione sia nuova o meno, ma che nella sessione sia presente l oggetto 'visite' per evitare un NullPointerException nell'inizializzare il valore della tua variabile 'n' (nel caso in cui per esempio richiami una servlet diversa da 'Conta', la sessione viene creata ma non è sicuro che nella sessione ci sia l oggetto 'visite', per cui 'n = new Integer (n.intValue()+1);' genera eccezione). Se ti interessa un contatore di 'accessi globali' ti consiglio anche di dare un occhio alla classe javax.servlet.http.HttpSessionListener e/o di tener conto anche degli IP delle richieste per evitare di contare accessi multipli se un utente aggiorna la pagina.
    Purtroppo anche se usi cookie o sessioni non è sicuro il tuo approccio perche l'utente potrebbe cancellare i cookie o disabilitarli e aggiornare la pagina.

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.