TAILLE D'UNE SESSION

jmanson Messages postés 2 Date d'inscription vendredi 9 juin 2006 Statut Membre Dernière intervention 12 juin 2006 - 12 juin 2006 à 12:04
hebenky Messages postés 3 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 13 novembre 2006 - 13 nov. 2006 à 10:05
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32191-taille-d-une-session

hebenky Messages postés 3 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 13 novembre 2006
13 nov. 2006 à 10:05
Cette question n'a à priori rien a faire ici.
Sinon pour faire simple : tu ajoutes dans la session un Integer que tu incrémentes à chaques appel de méthode service() de la servlet.

exemple :
service (request, response){
// attention au return null de getSession
Integer nbPageVisited = request.getSession().getAttribut("nbPageVisited");


if (nbPageVisited != null){
request.getSession().setAttribut("nbPageVisited", new Integer(nbPageVisited.intValue() + 1));
}
else {
request.getSession().setAttribut("nbPageVisited", new Integer(1));

}

}

voila, si tu as besoin de faire cela sur plusieurs servlets, il te suffit d'en faire une générique (qui implémentera la méthode précédente) et de de faire en sorte que les autres en héritent.
mangoo8 Messages postés 3 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 26 mars 2008
12 nov. 2006 à 20:03
j'arrive pas a résoudre une servlet qui permet d'afficher le nombre de visites d'une page pendant une session de navigation
hebenky Messages postés 3 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 13 novembre 2006
9 oct. 2006 à 14:41
Bonjours à tous,
deux commentaires :

- Effectivement Jérôme, la fonction computeObjectSize appelée comme dans le scriptlet initiale calcul la taille des identifiants. La correction que tu proposes est correcte.

- Le fait que cette fonction ne détermine la taille des objets que ssi ils sont sérialisables n'est pas une aberration. Bien au contraire, j'irais plus loin et je dirais que si je tombe sur un objet non sérialisable alors j'indique au développeur une erreur. Cette petite "astuce" permet d'assurer une compatibilité de l'application web sur des systèmes de clustering qui souvent réclament que le contenu d'une session soit sérialisable pour être partageable.


NB : un objet qui implémente java.io.Serializable n'est pas forcément sérialisable (il faut aussi que l'ensemble des ses propriétées soit sérialisables) . Pour savoir si l'objet est sérialisable, la méthode la plus simple est de sérialiser l'objet et de trapper l'exception java.io.NotSerializableException.


public static int computeObjectSize(Object o){
ByteArrayOutputStream baOS;
ObjectOutputStream objOS;
int size=0;
try {
baOS = new ByteArrayOutputStream();
objOS = new ObjectOutputStream(baOS);
objOS.writeObject(o);
baOS.close();
objOS.close();
size = baOS.size();
}
catch (IOException e) {
} finally{
baOS=null;
objOS=null;
}
return size;
}


Bon courage
ben
jmanson Messages postés 2 Date d'inscription vendredi 9 juin 2006 Statut Membre Dernière intervention 12 juin 2006
12 juin 2006 à 12:04
Salut !

J'ai une remarque : je ne suis pas sûr que tu prennes en compte tous les objets de la session !
ta variable "names" contient la liste des identifiants des objets en session.
ensuite tu récupère chaque identifiant dans la variable "name".
"name" est donc une chaine de caractères, envoyée en paramètre à la fonction "computeObjectSize". Tu calcules donc la taille des identifiants !
Me trompe-je ?

perso, j'aurais mis "computeObjectSize(session.getAttribute(name))"
problème : ta fonction computeObjectSize est uniquement OK pour les objets sérialisables. renvoie 0 sinon.

Any comment ?

Jerome