• Aucun résultat trouvé

Suppression des évènements dus aux frames

4.4.2 Reconstruction des surfs

A l’opposé des approches centrées serveur, qui se basent sur des heuristiques pour la reconstruction de sessions, notre travail permet, en fonctionnement normal, de connaître avec exactitude les moments de démarrage de navigations et leurs instants de fermeture.

Dans ce point, nous introduisons la notion de surf, qui correspond à une séance de navigation. Un surf commence donc à la détection du lancement d’une ou de plusieurs instances d’IE (évènements de type 01). Il est déclaré terminé, lorsque toutes ses instances sont achevées (évènements de type 03), sans aucune condition sur sa durée,

Etant donné que la reconstruction est effectuée seulement à posteriori, il a été constaté, en présence de certaines situations d’erreurs, que cette reconstruction n’est pas aisée. Par exemple, il impossible, en l’absence de suivi en ligne et en temps réel, de détecter la destruction anormale ou prématurée d’une instance d’IE active pour laquelle aucun évènement de fermeture n’est enregistré dans le log. Si non résolu, ce type de situation engendrera des navigations à longueur (durée) étrange voire infini, et rend la procédure de sessionisation quasi-impossible. Cette question est traitée dans le point suivant.

4.4.2.1 Détection et résolution des fenêtres non terminées

Durant un surf, les fenêtres non terminées sont celles démarrées mais n’ayant pas émis normalement un évènement de fermeture (code 03). Ce genre de situation se produit dans les cas de fermetures inopinées de l’instance du navigateur, suite entre autres, à un arrêt brutal du système, ou à la destruction de la fenêtre active par un outil de type filtre de contenu, ou pop-up blocker (outils bloquant les fenêtres publicitaires, ou autres indésirées).

Afin de résoudre de pareils cas, un balayage préalable et complet du log est la seule solution. Durant ce scan, nous détectons et séparons les fenêtres sans terminaisons. Nous devons, en suite, induire des instants de terminaisons pour chacune d’entre elles. A cet effet, trois solutions sont proposées fixant les instants de fins pour ces fenêtres :

1. ignorer la suite des évènements qu’aurait eu déclenchés la fenêtre, et la déclarer terminée au dernier évènement enregistré.

2. dans le même surf, assigner à la fin de la fenêtre, l’instant de l’évènement suivant immédiatement dans le log (il correspond obligatoirement à une autre fenêtre). 3. ajouter un évènement de terminaison fictif, après une duré égale à la moyenne

du rythme de déclenchement des évènements pour la fenêtre concernée. L’algorithme de résolution des fenêtres non terminées est le suivant.

Procedure fenetres_sans_fin

Entrée m : dans 1,2,3 pour approche à utiliser.

Sortie : table des fenêtres non terminées, avec des instants de fin.

debut

Ouvrir la table LOG ;

Créer une table F_NON_Terminée et l’initialiser ; Pour chaque utilisateur Ui(Maci,Logini) faire Appliquer un filtre à LOG pour les entrées de Ui ; Tant que non LOG.EOF faire

Lire (Item) ;

f Id_Fenetre(Item); e Evènement (Item); _debut Date_Heure(Item);

si e<3 alors (* 1 *) // debut de navigation ou fin de telechargement si f non trouve dans F_NON_Terminée (* 2 *)

alors iserer f dans F_NON_Terminée avec le numéro d’entrée du log; sinon debut

le numéro d’entrée du log pour f N° entrée en cours du log ; f.fin _debut ;

fin de si (* 2 * )

sinon // evènement de fermeture d’IE

si f trouvé dans F_NON_Terminée alors la supprimer fin de si (* 1 *) LOG.suivant;

Fin tant que ;

Annuler le filter pour LOG ;

Réouvrir F_NON_Terminée depuis le debut ; Tant que non F_NON_Terminée.eof faire Selon la méthode (m) faire :

1 :dans LOG, aller_au_dernier_évènement de la fenetre et récupérer son début dans _debut ;

2 : dans LOG, aller_au_premier_évènement_suivant_immediatement le dernier de la fenetre et récupérer son début dans _debut ;

3 : à partir de LOG, calculer la moyenne dans _debut

Modifier l’entrée de F_NON_Terminée en mettant Fin _debut ; F_NON_Terminée.suivant ;

Fin tant que ;

Fin de fenetres_sans_fin

14. Détection et résolution des fenêtres sans fin

Une fois les fenêtres non terminées identifiées et résolues, nous pouvons entamer la phase de sessionisation. La description de l’algorithme correspondant à cette phase est ci-dessous donnée.

4.4.2.2 Algorithme de sessionisation

L’objectif de la procédure de sessionisation est de reconstruire les différents surfs comme ils ont été parcourus par un utilisateur, en se basant sur les données stockées

produire d’une part un fichier de surfs délimités par leurs instants de début et de fin, et d’autre un deuxième fichier de pages visitées avec, pour chacune, des bornes temporelles.

Dans une situation sans erreur, la visite d’une seule page web triviale engendrera précisément par ordre chronologique trois lignes dans le fichier log. Une première de début de navigation (évènement 01), une seconde de fin de téléchargement de la page (évènement 02), et une dernière de fermeture du browser (évènement 03). Si c’est le cas, la sessionisation est alors très simple et intuitive. Toutefois, la situation se complique lors des visites effectuées sur les pages et les sites plus élaborés. En effet, avec les développements constants de la technologie de construction des pages web (frames, dynamisme, redirection…etc.), et le pullulement des publicités sur le net, nous avons constaté, que pour une requête vers une page de cette catégorie le schéma décrit plus haut n’est plus conservé, et que souvent le log consigne de multiple évènements de début de navigation, et de fin de téléchargement.

Mentionnons que dans la phase de nettoyage, nous n’avons considéré que les problèmes des items inutiles au regard à leurs urls, et des frames. Des questions comme les pages publicitaires, et les formes complexes d’équivalence d’urls ne sont pas prise en considération. Ce genre de problèmes nécessite la connaissance d’autres données à l’échelle du web, qui ne sont pas néanmoins à notre portée.

La succession des lignes du fichier log, réduites aux types évènements déclenchés, dans une situation sans erreur, peut être exprimée en fonction d’expressions régulières de la façon suivante :

visite d’une seule page web simple : (01)(02)(03)

visite d’une seule page plus complexe, i>0, et 0<=j<=i : (01)i(02)j(03)

Documents relatifs