Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Merci de me faire part de votre expérience sur : Session

8 réponses
Avatar
sebastien981_nospam
Bonjour,

je suis entrain de développer un site utilisant fortement les sessions
c'est à dire que je dois stocker le moindre clic sur un bouton j'ai
essayé en utilisant l'événement session_end du global.asax mais
visiblement la fin de session n'est pas correctement géré en tout cas
je n'ai pas la certitude absolue de l'enregistrement de la session avec
cette méthode.

Pourriez vous me dire dans la mesure où vous avez déjà utilisez les
sessions ce qui vous a semblé le mieu : utilisez sql server, utiliser
un fichier de log, utiliser l'événement session_end, en me disant
globalement comment vous avez architecturé cela

Merci

8 réponses

Avatar
Pascal Mercier
Bonjour,

Pourriez-vous expliquer plus précisément ce que vous souhaitez faire
(indépendamment de la façon de le faire) ?

merci,

Pascal Mercier
Microsoft France

wrote in message
news:
Bonjour,

je suis entrain de développer un site utilisant fortement les sessions
c'est à dire que je dois stocker le moindre clic sur un bouton j'ai
essayé en utilisant l'événement session_end du global.asax mais
visiblement la fin de session n'est pas correctement géré en tout cas
je n'ai pas la certitude absolue de l'enregistrement de la session avec
cette méthode.

Pourriez vous me dire dans la mesure où vous avez déjà utilisez les
sessions ce qui vous a semblé le mieu : utilisez sql server, utiliser
un fichier de log, utiliser l'événement session_end, en me disant
globalement comment vous avez architecturé cela

Merci




Avatar
YJLAMOTTE
Bonjour,
Si tu dois stocker toutes les actions de ton utilisateur, le mieux est de
stocker dans un fichier de log, tu vas avoir de très grosses sessions.
Fais bosser le proc et les disques plutot que de saturer ta mémoire.

Mais après tout dépend de ce que tu dois faire de ces infos. Si tu veux une
autre piste donne plus de détails.

Pour le Session_End, ca fonctionne bien pas d'inquiétude à avoir. Cependant,
il ne se produit qu'à l'expiration du timeout. Ton utilisateur peut être
parti depuis longtemps.

YJLAMOTTE
"" a écrit :

Bonjour,

je suis entrain de développer un site utilisant fortement les sessions
c'est à dire que je dois stocker le moindre clic sur un bouton j'ai
essayé en utilisant l'événement session_end du global.asax mais
visiblement la fin de session n'est pas correctement géré en tout cas
je n'ai pas la certitude absolue de l'enregistrement de la session avec
cette méthode.

Pourriez vous me dire dans la mesure où vous avez déjà utilisez les
sessions ce qui vous a semblé le mieu : utilisez sql server, utiliser
un fichier de log, utiliser l'événement session_end, en me disant
globalement comment vous avez architecturé cela

Merci





Avatar
sebastien981_nospam
Bonjour,

je répond au deux posts en un et je remercie les personnes qui m'ont
répondu.

en fait j'ai fait des test sur le session end mais sur la dernière
session je n'ai jamais vu arriver l'enregistrement.

je fais un site web d'administration de base de donnée qui permet entre
autre de lancer la facturation, or je voudrais stocker toutes les
actions faites sur ce site car en cas de problème on veut pouvoir dire
voilà c Mr X tel jour à telle heure qui a fait ça. Donc j'ai créé une
classe qui stocke le nom de la personne connecté quand elle s'est
connecté et quand elle se déconnecte (dans session end DateTime.Now
dans le champ de classe datefin)or je constate que le session end n'est
pas sufisant fiable dans le moment de l'enregistrement de l'info
d'action il semble qu'il utilise le timeout de session pour dire que
c'est la fin imaginons un crash serveur avant le timeout et bien je
n'ai pas l'info enregistré.

aujourd'hui je stocke dans une base sql server c'est info de navigation
et d'action en appelent dans session end la fonction de ma classe qui
va bien.

Je voudrais savoir s'il existe d'autre moyen, fiable, rapide etc etc

En fait je cherche le meilleur How To stocker les informations de
navigation des utilisateurs de façon persistente

Sebastien
Pascal Mercier a exposé le 17/09/2004 :
Bonjour,

Pourriez-vous expliquer plus précisément ce que vous souhaitez faire
(indépendamment de la façon de le faire) ?

merci,

Pascal Mercier
Microsoft France

wrote in message
news:
Bonjour,

je suis entrain de développer un site utilisant fortement les sessions
c'est à dire que je dois stocker le moindre clic sur un bouton j'ai
essayé en utilisant l'événement session_end du global.asax mais
visiblement la fin de session n'est pas correctement géré en tout cas
je n'ai pas la certitude absolue de l'enregistrement de la session avec
cette méthode.

Pourriez vous me dire dans la mesure où vous avez déjà utilisez les
sessions ce qui vous a semblé le mieu : utilisez sql server, utiliser
un fichier de log, utiliser l'événement session_end, en me disant
globalement comment vous avez architecturé cela

Merci




Avatar
Patrice
Le "session_onend" ne te donnera que le moment ou le serveur considère la
session comme finie faute de nouvelles de l'utlisateur (si tant est que
cette évènement surviennent, personnellement je ne l'utilise jamais).

Ce n'est pas très clair mais j'ai aussi l'impression que tu stockes des
infos en session pour ne les sauver qu' à la fin de la session. Si oui,
pourqoi ne pas les sauver au fil de l'eau ?

Les "informations de navigation" cela me parait trop vague. Je pense qu'il
faut tracer ce qui a un sens pour l'application (création, suppression,
destruction, peut-être modification ?). Les droits peuvent permettre aussi
de s'assurer que les informations ne peuvent être modifiées de toute façon
que par les personnes concernées (et non pas par un tiers par erreur lors
d'une consultation par exemple).

Je verrais plutôt :

1) Intégrer ce qui peut l'être explicitement dans l'application. Par exemple
pour une commande , on stockera par exemple "créateur","date de création",
"validateur", "date de validation" etc...

2) Si audit plus précis, le gérer peut-être sous forme d'un "journal". Par
exemple avec une base autorisant les déclencheurs ou si l'application
utilise des procédures stockées, il est assez facile d'ajouter un audit qui
listera les informations modifiées éventuellement champ par champ pour
certains des champs les plus sensibles.

Attention à la tentation de générer des données détaillées qui ne seront
jamais exploitées/surveillées. Je commencerais déjà par voir si des
informations "cas 1" peuvent être ajoutées dans l'application...

Patrice

--

a écrit dans le message de
news:
Bonjour,

je répond au deux posts en un et je remercie les personnes qui m'ont
répondu.

en fait j'ai fait des test sur le session end mais sur la dernière
session je n'ai jamais vu arriver l'enregistrement.

je fais un site web d'administration de base de donnée qui permet entre
autre de lancer la facturation, or je voudrais stocker toutes les
actions faites sur ce site car en cas de problème on veut pouvoir dire
voilà c Mr X tel jour à telle heure qui a fait ça. Donc j'ai créé une
classe qui stocke le nom de la personne connecté quand elle s'est
connecté et quand elle se déconnecte (dans session end DateTime.Now
dans le champ de classe datefin)or je constate que le session end n'est
pas sufisant fiable dans le moment de l'enregistrement de l'info
d'action il semble qu'il utilise le timeout de session pour dire que
c'est la fin imaginons un crash serveur avant le timeout et bien je
n'ai pas l'info enregistré.

aujourd'hui je stocke dans une base sql server c'est info de navigation
et d'action en appelent dans session end la fonction de ma classe qui
va bien.

Je voudrais savoir s'il existe d'autre moyen, fiable, rapide etc etc

En fait je cherche le meilleur How To stocker les informations de
navigation des utilisateurs de façon persistente

Sebastien
Pascal Mercier a exposé le 17/09/2004 :
> Bonjour,
>
> Pourriez-vous expliquer plus précisément ce que vous souhaitez faire
> (indépendamment de la façon de le faire) ?
>
> merci,
>
> Pascal Mercier
> Microsoft France
>
> wrote in message
> news:
>> Bonjour,
>>
>> je suis entrain de développer un site utilisant fortement les sessions
>> c'est à dire que je dois stocker le moindre clic sur un bouton j'ai
>> essayé en utilisant l'événement session_end du global.asax mais
>> visiblement la fin de session n'est pas correctement géré en tout cas
>> je n'ai pas la certitude absolue de l'enregistrement de la session avec
>> cette méthode.
>>
>> Pourriez vous me dire dans la mesure où vous avez déjà utilisez les
>> sessions ce qui vous a semblé le mieu : utilisez sql server, utiliser
>> un fichier de log, utiliser l'événement session_end, en me disant
>> globalement comment vous avez architecturé cela
>>
>> Merci




Avatar
sebastien981_nospam
Pour l'application je met en place une identification par formulaire

j'ai ma base a administrer dison la base de production elle stocke les
info client, les contrat, les factures etc etc.

J'ai une base administration elle stocke les login password des
administrateurs de la base a administrer.

la base administration contient pour le moment deux tables :
- la table stockant les administrateurs : idadmin, nomadmin, login
,password (je pourrais utiliser les profils windows mais je souhaite
créer des login password très différent de ce que j'ai en windows pour
garantir que si quelqu'un utilise ces login password ça ne peut être
que la personne dans la base comme vous le savez il arrive que l'on
donne ses login password à un collègue, donc là c 'est tellement
différent que la personne est stupide si elle a donné ses propre login
password)


- la table historique des actions : clef primaire (compteur), nomadmin
(je ne stocke pas l'id de l'admin car si l'id change cela changera la
notion d'historique) , description des actions , date début, date fin

pour le moment descriptions des actions est un champ ntext

Mon problème est que déjà il y a une personne de mauvaise fois (on en a
tous) qui raconte tellement d'histoire à gauche et à droite que pour
éviter de devoir expliquer les manipulations j'ai dcidé de stocker TOUT
ce qui est fait cette personne pourrait contester le fait d'avoir
cliquer sur le bouton qui lance la facturation des clients donc là la
base va dire :

"Mr X a cliqué sur le bouton "facturation" Mr X a saisie tel date de
début de contrat, telle date de fin de contrat, Mr X a lancé la
facturation du mois de novembre , Mr X a enregistré le fichier pdf
généré"

etc etc comme ça ça devient incontestable

effectivement moi non plus je n'utilise jamais le session end et je
stocke au fil de l'eau le problème est qu'a mon sens si a chaque clic
je lance la sauvegarde dans la base c'est trois seconde de temps perdu
(ouverture connection, exécution prod stocke sql server, retour info ok
pas ok ... je dis 3 secondes si plus tard il y a un declencheur ou
d'autres choses exotique)

Donc je par dans l'idée de gérer ça à la fin. J'avais aussi pensé à
paramétrer le web.config pour gérer la session dans sql server (donc
modifier le inproc en stateserver si je dis pas de bêtise) seulement
d'après ce que je penses avoir compris cela sera encore plus lourd à
faire (sérialisation désérialisation) et même l'application va s'en
ressentir.

Mon idée (et je ne dis pas qu'elle est bonne loin de là c'est pour cela
que je viens en débattre) est là suivante

je cré une classe

class Utilisateur:IUtilisateur // interface pour évolution futur

{
private int _id;
private StringBuilder _action;
private string _nom;
private bool _isIdentified;
private DateTime _debutAction;
private DateTime _finAction;

private static string
ConnectionStr=ConfigurationSettings.AppSettings["DSN1"];
private static SqlConnection Myconnection=new
SqlConnection(ConnectionStr);


private Utilisateur()
{
_action=new StringBuilder();
_id=0;
_nom="";
_isIdentifiedúlse;
_debutActionÚteTime.Now;
_finActionÚteTime.MinValue ;
}
private Utilisateur (string nom,DateTime debutaction):this()
{
_nom=nom;
_debutActionÞbutaction;
}
private Utilisateur (int id, string nom,DateTime debutaction):this()
{
_id=id;
_nom=nom;
_debutActionÞbutaction;
}


#region Membres de IUtilisateur

public int Id
{
get
{
return _id;
}
}
public string Nom
{
get
{
return _nom;
}
}

public bool IsIdentified
{
get
{
return _isIdentified;
}
}

public string Action
{
get
{
return _action.ToString();
}
set
{
this._action.Append(value);
}
}

public DateTime DebutAction
{
get
{
return this._debutAction ;
}
}

public DateTime FinAction
{
get
{
return this._finAction;
}
}

public string EnregistrerAction()
{
SqlCommand mycmd=new
SqlCommand("EnregistrementAction",Myconnection);
mycmd.CommandType=CommandType.StoredProcedure;
SqlParameter
prm1=mycmd.Parameters.Add("@nomadministrateur",SqlDbType.NVarChar);
SqlParameter
prm2=mycmd.Parameters.Add("@actionadministration",SqlDbType.NText);
SqlParameter
prm3=mycmd.Parameters.Add("@debutadministration",SqlDbType.SmallDateTime);
SqlParameter
prm4=mycmd.Parameters.Add("@finadministration",SqlDbType.SmallDateTime);

prm1.Value=this._nom;
prm2.Value=this._action.ToString();
prm3.Value=this._debutAction;
prm4.ValueÚteTime.Now ;

try
{
Myconnection.Open();
mycmd.ExecuteNonQuery();
return "enregistrement réussi";
}
catch (Exception err)
{
return "erreur enregistrement" + " " + err.Message;
}
finally
{
Myconnection.Close();
}
}

public static Utilisateur Identification(string login,string
password)
{
SqlCommand mycmd=new SqlCommand("Identification",Myconnection);
mycmd.CommandType=CommandType.StoredProcedure;
SqlParameter prm1=mycmd.Parameters.Add("@login",SqlDbType.NVarChar);
SqlParameter
prm2=mycmd.Parameters.Add("@password",SqlDbType.NVarChar);

prm1.Value=login;
prm2.Value=password;

string temp;
string[] temparray;

try
{
Myconnection.Open();
temp=Convert.ToString( mycmd.ExecuteScalar());
temparray=temp.Split('/');

if (temparray[0]=="-1")
return null;

return new
Utilisateur(Convert.ToInt32(temparray[0]),temparray[1],DateTime.Now);
}
catch

{
return null;
}
finally
{
Myconnection.Close();
}
}


#endregion
}


A chaque action sur la page je fais un truc du genre


((Utilisateur)Session["utilisateur"]).Action="l'utilisateur vient de
lancer la facturation";

comme Action est un stringbuilder la propriété fait directement un
append(value) (cf le code)

Ensuite dans le global.asax

Public void Session_End(...)
{
((Utilisateur)Session["utilisateur"]).EnregistrerAction();
}


voilà je crois que tout y est



Patrice a formulé la demande :
Le "session_onend" ne te donnera que le moment ou le serveur considère la
session comme finie faute de nouvelles de l'utlisateur (si tant est que
cette évènement surviennent, personnellement je ne l'utilise jamais).

Ce n'est pas très clair mais j'ai aussi l'impression que tu stockes des
infos en session pour ne les sauver qu' à la fin de la session. Si oui,
pourqoi ne pas les sauver au fil de l'eau ?

Les "informations de navigation" cela me parait trop vague. Je pense qu'il
faut tracer ce qui a un sens pour l'application (création, suppression,
destruction, peut-être modification ?). Les droits peuvent permettre aussi
de s'assurer que les informations ne peuvent être modifiées de toute façon
que par les personnes concernées (et non pas par un tiers par erreur lors
d'une consultation par exemple).



Effectivement , mais regarde la partie supra sur la personne de
mauvaise fois c'est un peu elle qui me contraint a stocker un maximum,
sinon on a le droit "ah mais non tu m'a dit que [...] donc je n'ai pas
fait d'erreur", "Ah mais non je n'ai pas pu faire [....] vu que je
suispas allé sur cette page ton suivi se trompe"

Je verrais plutôt :

1) Intégrer ce qui peut l'être explicitement dans l'application. Par exemple
pour une commande , on stockera par exemple "créateur","date de création",
"validateur", "date de validation" etc...

2) Si audit plus précis, le gérer peut-être sous forme d'un "journal". Par
exemple avec une base autorisant les déclencheurs ou si l'application
utilise des procédures stockées, il est assez facile d'ajouter un audit qui
listera les informations modifiées éventuellement champ par champ pour
certains des champs les plus sensibles.




l'idée du journal est très bonne mais 1) il grossi vite 2) il est remis
à zéro régulièrement

Attention à la tentation de générer des données détaillées qui ne seront
jamais exploitées/surveillées. Je commencerais déjà par voir si des
informations "cas 1" peuvent être ajoutées dans l'application...



les données détaillées sont aussi ce que je souhaiterais éviter mais
dans la mesure où pour le moment je pars du principe de tout stocker je
m'oriente vers ça forcément. Je me demande ce que donne le stockage
dans sql server à partir du web.config.

Patrice

--

a écrit dans le message de
news:
Bonjour,

je répond au deux posts en un et je remercie les personnes qui m'ont
répondu.

en fait j'ai fait des test sur le session end mais sur la dernière
session je n'ai jamais vu arriver l'enregistrement.

je fais un site web d'administration de base de donnée qui permet entre
autre de lancer la facturation, or je voudrais stocker toutes les
actions faites sur ce site car en cas de problème on veut pouvoir dire
voilà c Mr X tel jour à telle heure qui a fait ça. Donc j'ai créé une
classe qui stocke le nom de la personne connecté quand elle s'est
connecté et quand elle se déconnecte (dans session end DateTime.Now
dans le champ de classe datefin)or je constate que le session end n'est
pas sufisant fiable dans le moment de l'enregistrement de l'info
d'action il semble qu'il utilise le timeout de session pour dire que
c'est la fin imaginons un crash serveur avant le timeout et bien je
n'ai pas l'info enregistré.

aujourd'hui je stocke dans une base sql server c'est info de navigation
et d'action en appelent dans session end la fonction de ma classe qui
va bien.

Je voudrais savoir s'il existe d'autre moyen, fiable, rapide etc etc

En fait je cherche le meilleur How To stocker les informations de
navigation des utilisateurs de façon persistente

Sebastien
Pascal Mercier a exposé le 17/09/2004 :
Bonjour,

Pourriez-vous expliquer plus précisément ce que vous souhaitez faire
(indépendamment de la façon de le faire) ?

merci,

Pascal Mercier
Microsoft France

wrote in message
news:
Bonjour,

je suis entrain de développer un site utilisant fortement les sessions
c'est à dire que je dois stocker le moindre clic sur un bouton j'ai
essayé en utilisant l'événement session_end du global.asax mais
visiblement la fin de session n'est pas correctement géré en tout cas
je n'ai pas la certitude absolue de l'enregistrement de la session avec
cette méthode.

Pourriez vous me dire dans la mesure où vous avez déjà utilisez les
sessions ce qui vous a semblé le mieu : utilisez sql server, utiliser
un fichier de log, utiliser l'événement session_end, en me disant
globalement comment vous avez architecturé cela

Merci








Avatar
Pascal Mercier
Bonjour,

Vaste question que celle-ci. Cela revient à poser la question de
l'instrumentation d'une application. L'instrumentation relève trois grands
types de suivis:
1 - créer un journal des événements techniques
2 - créer un journal des événements fonctionnels
3 - créer une liste de compteurs de performances

Le problème, tel que vous le présentez, relève plutôt du point 2. Il faut
journaliser au fur et à mesure des événements.

Si vous souhaitez suivre le cheminement d'un utilisateur dans un site web,
tout dépend du niveau de granularité du suivi souhaité.
Si le suivi des pages web suffit, vous pouvez utiliser les logs IIS qui vous
donne pour chaque utilisateur (s'il est authentifié) ses mouvements de page
en page. Ensuite, il faut pouvoir parser les fichiers de log (fichier texte
dans un format standard) et les stocker en base pour y effectuer les
requêtes qui vont bien. Par contre, cette technique ne vous donnera pas
l'action précise effectuée dans la page (du genre : l'utilisateur a cliqué
sur telle image et a fait telle ou telle opération, etc).
Si le suivi des pages web ne suffit pas, il faut tracer dans les composants
métiers sous-jacents aux pages web. Pour faire ça et en fonction du traffic
attendu sur le site vous pouvez utiliser une base de données ou des fichiers
qu'il faudra ensuite parser.
A tout hasard, je vous recommande de regarder le framework d'instrumentation
EIF (Enterprise Instrumentation Framework) à l'adresse
http://msdn.microsoft.com/vstudio/enterprise/EIF/ qui permet d'instrumenter
une application (Web ou Windows). Un des avantages de EIF est qu'il est
sufissament générique pour isoler l'application de la source de données de
stockage des événéments. Un autre avantage : c'est gratuit.

Pour ce qui est de l'utilisation de l'objet Session, il faut savoir que les
clients web travaillent en mode déconnecté des serveurs. C'est à dire qu'un
serveur ne "sait" pas si un client est connecté ou non. Un client se
connecte au moment d'une requête HTTP et se déconnecte une fois la page
renvoyée par le serveur. Dans ce contexte, la notion de fin de session est
donc un non sens par définition. Cependant, d'un point de vue technique,
pour pouvoir purger les objets Session "abandonnés" par les utilisateurs
(ils sont partis sur un autre site par exemple), un événement Session_End se
déclenche pour faire disparaitre les données stockée dans l'objet Session du
client. A vous d'estimer la durée correcte d'une "session". Par défaut,
c'est 30 minutes.
En tout cas, dans votre cas, l'utilisation de l'objet Session n'est
définitivement pas la solution à votre problème. Et plus généralement, et
autant que possible, ne pas utiliser l'objet Session. La raison ? : 1) Par
défaut, ça ne fonctionne que sur une plateforme mono serveur (sauf à mettre
ASP State avec une base de données), 2) conséquence du 1, ce n'est pas
scalable, 3) conséquence du 1, ça oblige à mettre les load balancers en mode
d'affinité serveur, 4) ça consomme de la mémoire qu'il est préférable
d'utiliser à autre chose.

Cordialement;

Pascal Mercier
MCS - Microsoft France

wrote in message
news:
Bonjour,

je répond au deux posts en un et je remercie les personnes qui m'ont
répondu.

en fait j'ai fait des test sur le session end mais sur la dernière
session je n'ai jamais vu arriver l'enregistrement.

je fais un site web d'administration de base de donnée qui permet entre
autre de lancer la facturation, or je voudrais stocker toutes les
actions faites sur ce site car en cas de problème on veut pouvoir dire
voilà c Mr X tel jour à telle heure qui a fait ça. Donc j'ai créé une
classe qui stocke le nom de la personne connecté quand elle s'est
connecté et quand elle se déconnecte (dans session end DateTime.Now
dans le champ de classe datefin)or je constate que le session end n'est
pas sufisant fiable dans le moment de l'enregistrement de l'info
d'action il semble qu'il utilise le timeout de session pour dire que
c'est la fin imaginons un crash serveur avant le timeout et bien je
n'ai pas l'info enregistré.

aujourd'hui je stocke dans une base sql server c'est info de navigation
et d'action en appelent dans session end la fonction de ma classe qui
va bien.

Je voudrais savoir s'il existe d'autre moyen, fiable, rapide etc etc

En fait je cherche le meilleur How To stocker les informations de
navigation des utilisateurs de façon persistente

Sebastien
Pascal Mercier a exposé le 17/09/2004 :
> Bonjour,
>
> Pourriez-vous expliquer plus précisément ce que vous souhaitez faire
> (indépendamment de la façon de le faire) ?
>
> merci,
>
> Pascal Mercier
> Microsoft France
>
> wrote in message
> news:
>> Bonjour,
>>
>> je suis entrain de développer un site utilisant fortement les sessions
>> c'est à dire que je dois stocker le moindre clic sur un bouton j'ai
>> essayé en utilisant l'événement session_end du global.asax mais
>> visiblement la fin de session n'est pas correctement géré en tout cas
>> je n'ai pas la certitude absolue de l'enregistrement de la session avec
>> cette méthode.
>>
>> Pourriez vous me dire dans la mesure où vous avez déjà utilisez les
>> sessions ce qui vous a semblé le mieu : utilisez sql server, utiliser
>> un fichier de log, utiliser l'événement session_end, en me disant
>> globalement comment vous avez architecturé cela
>>
>> Merci




Avatar
sebastien981_nospam
Bonjour,

merci de toutes ces précisions, effectivement je me doutais que je
partais en croisade vu l'ampleur de la tache.

Cela faisant un moment que je n'étais pas aller voir la partie
architecture du site de microsoft je vais regarder attentivement EIF et
je viendrais faire un compte rendu de ce que j'ai trouvé.

En tout cas merci pour ces précisions qui confirme bien que je n'étais
pas vraiment sur la bonne voie.

Cordialement Sebastien

Pascal Mercier a présenté l'énoncé suivant :
Bonjour,

Vaste question que celle-ci. Cela revient à poser la question de
l'instrumentation d'une application. L'instrumentation relève trois grands
types de suivis:
1 - créer un journal des événements techniques
2 - créer un journal des événements fonctionnels
3 - créer une liste de compteurs de performances

Le problème, tel que vous le présentez, relève plutôt du point 2. Il faut
journaliser au fur et à mesure des événements.

Si vous souhaitez suivre le cheminement d'un utilisateur dans un site web,
tout dépend du niveau de granularité du suivi souhaité.
Si le suivi des pages web suffit, vous pouvez utiliser les logs IIS qui vous
donne pour chaque utilisateur (s'il est authentifié) ses mouvements de page
en page. Ensuite, il faut pouvoir parser les fichiers de log (fichier texte
dans un format standard) et les stocker en base pour y effectuer les
requêtes qui vont bien. Par contre, cette technique ne vous donnera pas
l'action précise effectuée dans la page (du genre : l'utilisateur a cliqué
sur telle image et a fait telle ou telle opération, etc).
Si le suivi des pages web ne suffit pas, il faut tracer dans les composants
métiers sous-jacents aux pages web. Pour faire ça et en fonction du traffic
attendu sur le site vous pouvez utiliser une base de données ou des fichiers
qu'il faudra ensuite parser.
A tout hasard, je vous recommande de regarder le framework d'instrumentation
EIF (Enterprise Instrumentation Framework) à l'adresse
http://msdn.microsoft.com/vstudio/enterprise/EIF/ qui permet d'instrumenter
une application (Web ou Windows). Un des avantages de EIF est qu'il est
sufissament générique pour isoler l'application de la source de données de
stockage des événéments. Un autre avantage : c'est gratuit.

Pour ce qui est de l'utilisation de l'objet Session, il faut savoir que les
clients web travaillent en mode déconnecté des serveurs. C'est à dire qu'un
serveur ne "sait" pas si un client est connecté ou non. Un client se
connecte au moment d'une requête HTTP et se déconnecte une fois la page
renvoyée par le serveur. Dans ce contexte, la notion de fin de session est
donc un non sens par définition. Cependant, d'un point de vue technique,
pour pouvoir purger les objets Session "abandonnés" par les utilisateurs
(ils sont partis sur un autre site par exemple), un événement Session_End se
déclenche pour faire disparaitre les données stockée dans l'objet Session du
client. A vous d'estimer la durée correcte d'une "session". Par défaut,
c'est 30 minutes.
En tout cas, dans votre cas, l'utilisation de l'objet Session n'est
définitivement pas la solution à votre problème. Et plus généralement, et
autant que possible, ne pas utiliser l'objet Session. La raison ? : 1) Par
défaut, ça ne fonctionne que sur une plateforme mono serveur (sauf à mettre
ASP State avec une base de données), 2) conséquence du 1, ce n'est pas
scalable, 3) conséquence du 1, ça oblige à mettre les load balancers en mode
d'affinité serveur, 4) ça consomme de la mémoire qu'il est préférable
d'utiliser à autre chose.

Cordialement;

Pascal Mercier
MCS - Microsoft France

wrote in message
news:
Bonjour,

je répond au deux posts en un et je remercie les personnes qui m'ont
répondu.

en fait j'ai fait des test sur le session end mais sur la dernière
session je n'ai jamais vu arriver l'enregistrement.

je fais un site web d'administration de base de donnée qui permet entre
autre de lancer la facturation, or je voudrais stocker toutes les
actions faites sur ce site car en cas de problème on veut pouvoir dire
voilà c Mr X tel jour à telle heure qui a fait ça. Donc j'ai créé une
classe qui stocke le nom de la personne connecté quand elle s'est
connecté et quand elle se déconnecte (dans session end DateTime.Now
dans le champ de classe datefin)or je constate que le session end n'est
pas sufisant fiable dans le moment de l'enregistrement de l'info
d'action il semble qu'il utilise le timeout de session pour dire que
c'est la fin imaginons un crash serveur avant le timeout et bien je
n'ai pas l'info enregistré.

aujourd'hui je stocke dans une base sql server c'est info de navigation
et d'action en appelent dans session end la fonction de ma classe qui
va bien.

Je voudrais savoir s'il existe d'autre moyen, fiable, rapide etc etc

En fait je cherche le meilleur How To stocker les informations de
navigation des utilisateurs de façon persistente

Sebastien
Pascal Mercier a exposé le 17/09/2004 :
Bonjour,

Pourriez-vous expliquer plus précisément ce que vous souhaitez faire
(indépendamment de la façon de le faire) ?

merci,

Pascal Mercier
Microsoft France

wrote in message
news:
Bonjour,

je suis entrain de développer un site utilisant fortement les sessions
c'est à dire que je dois stocker le moindre clic sur un bouton j'ai
essayé en utilisant l'événement session_end du global.asax mais
visiblement la fin de session n'est pas correctement géré en tout cas
je n'ai pas la certitude absolue de l'enregistrement de la session avec
cette méthode.

Pourriez vous me dire dans la mesure où vous avez déjà utilisez les
sessions ce qui vous a semblé le mieu : utilisez sql server, utiliser
un fichier de log, utiliser l'événement session_end, en me disant
globalement comment vous avez architecturé cela

Merci








Avatar
VM
Log4Net est super pour ça ...

"YJLAMOTTE" a écrit dans le message de
news:
Bonjour,
Si tu dois stocker toutes les actions de ton utilisateur, le mieux est de
stocker dans un fichier de log, tu vas avoir de très grosses sessions.
Fais bosser le proc et les disques plutot que de saturer ta mémoire.

Mais après tout dépend de ce que tu dois faire de ces infos. Si tu veux


une
autre piste donne plus de détails.

Pour le Session_End, ca fonctionne bien pas d'inquiétude à avoir.


Cependant,
il ne se produit qu'à l'expiration du timeout. Ton utilisateur peut être
parti depuis longtemps.

YJLAMOTTE
"" a écrit :

> Bonjour,
>
> je suis entrain de développer un site utilisant fortement les sessions
> c'est à dire que je dois stocker le moindre clic sur un bouton j'ai
> essayé en utilisant l'événement session_end du global.asax mais
> visiblement la fin de session n'est pas correctement géré en tout cas
> je n'ai pas la certitude absolue de l'enregistrement de la session avec
> cette méthode.
>
> Pourriez vous me dire dans la mesure où vous avez déjà utilisez les
> sessions ce qui vous a semblé le mieu : utilisez sql server, utiliser
> un fichier de log, utiliser l'événement session_end, en me disant
> globalement comment vous avez architecturé cela
>
> Merci
>
>
>