[résolu][ASP .NET] Différence entre Request.ServerVariables["AUTH_USER"] et HttpContext.Current.User.Identity.Name

Hello les geeks B)

J’aimerai connaitre la différence entre Request.ServerVariables[“AUTH_USER”] et HttpContext.Current.User.Identity.Name. Je n’ai pas eu suffisamment de détail via MSDN et autres recherches sur le web.

Je sais que ces deux commandes récupèrent le nom de l’utilisateur qui est authentifié. Mais je ne connais pas leur manière de fonctionner, ni la durée de stockage des infos. En utilisant “HttpContext.Current.User.Identity.Name” et au bout de 20 min de non utilisation de mon appli web, la variable me retourne un string.Empty au lieu du nom de l’user.
J’ai pas encore testé le comportement de “Request.ServerVariables[“AUTH_USER”]” vu qu’il faut que je patiente encore 20 min pour voir le résultat >_< bon, c’est pas méchant, mais entre chaque manip que je fais sur le code source, je suis obligé d’attendre ces 20 min pour tester. Et c’est plutot gênant.

Cela dit, le timeout des sessions est configuré à 180 min et en mode In-Process. J’ai une mauvaise impression que mon appli perd ces variables de session. Mais j’ai plutot un doute.

Edit : y a pas un moyen de simuler une accélération temporel sur la sessionState ? B)
Je suis sous .NET 1.1.

Voilà, voilà.

Déjà comment tu fais pour attendre 20mn oO ? HttpContext est créé à chaque requête web. Le gars en face attend 20mn la réponse du serveur?

Request est un « raccourci » vers HttpContext.Current.Request… donc je pense que ça répond à ta question B)

Sinon, Reflector est ton ami pour ce genre de questions B) Je n’ai pas regardé mais intuitivement, je dirais que HttpContext.Current.User est construit en fonction de AUTH_USER de request.

Les 20 minutes correspondent à la session.
Tu peut regler la durée dans le web.config:

<system.web>

Ensuite pour la différence je ne sais pas mais j utilise “HttpContext.Current.User.Identity.Name” et cela fonctionne bien.

Ouais attendez il me semble quand même que le problème est un peu plus complexe qu’une simple question de durée de vie des sessions.

Déjà quel est le mode d’authentification? formulaire? Windows?

C’est de l’authentification Windows. Et j’initialise durant l’auth, la variable “HttpContext.Current.User.Identity” et je le stocke en session que je récupérerais lorsque je change de page (à cause d’un user control qui réclame cette variable. Et vu que .NET 1.1 ne gère pas les MasterPage, chui dans la belle merde xD ).

Concernant les 20 min, bah je me suis occupé à lire de la doc sur ces variables justement et les pertes de sessions >_<. Y en a qui parle de configuration du Pool de IIS 6.0. D’autre, la méthode de session utilisée (out process au lieu du in-process), etc… Et comme par hasard, en retestant comme un fou mon appli sur serveur de prod, je perds de facon quasi immédiat (enfin de facon aléatoire) ces variable de session dès qu’il y a communication client/serveur (déclenché sur un bouton type look up qui me génère une pop up remplit par le serveur). Alors qu’en dev, je perds moins souvent ces données.

J’ai du pour l’instant, modifié mon code pour regénérer manuellement (si perte de donnée, il y a) les variables de session/HttpContext.Current.User.Identity avec redirection vers la dernière page visitée. Je sais c’est mal. Mais je préfère éviter ça.

[quote=“valky, post:3, topic: 45866”]Les 20 minutes correspondent à la session.
Tu peut regler la durée dans le web.config:

<system.web>

Ensuite pour la différence je ne sais pas mais j utilise “HttpContext.Current.User.Identity.Name” et cela fonctionne bien.[/quote]

Je l’ai précisé que le timeout était définit à 180 minutes. B)

T’as une couille dans ton app qqpart, c’est pas normal du tout ce que tu decris.

Bon je ne suis plus du tout à fait au fait de ASP .NET 1.1, mais quand je lis ça :

Déjà ça me semble super étrange. Tu initialises toi même HttpContext.Current.User.Identity? B) Il me semble que même en 1.1, en auth windows intégré tu n’as rien à faire.

Bon je connais pas le contexte, et je dévie un peu le sujet en te demandant pourquoi ne pas passer en ASP.NET 2?

Enfin tout ceci me paraît assez étrange et comme le dit Glop, il doit y avoir quelque part un problème dans l’application.

Malheureusement, je ne peux pas passer en .NET 2.0. On me demade de bosser sur 1.1 B) Pour l’initialisation, j’y peut rien. Je ne fais que réutiliser les bibliothèques existantes du projet. Euh, en fait, c’est pas une initialisation de HttpContext.Current.User.Identity mais plutot HttpContext.Current.User. xD M’enfin.

Ce qui est fort bizarre, c’est que je perds le contenu de HttpContext.Current.User.Identity alors que je n’y touche plus une fois authentifiée. Cela dit, je reregarde tout ça.

Moi je dis comme ça, intuitivement, que ça send le vieil effet de bord des familles (et je dis comme ça aussi que t’as l’air de reprendre un projet foutu assez “bizarement” pour rester poli B) )

Muhahaha, j’ai trouvé le problème. Donc, ca n’a rien à voir avec les pertes de session, ni au code. Mais, mais … attendez … à la configuration de IIS >_< Dans l’onglet Securité du répertoire, j’avais coché Connexion Anonyme.
J’en avais besoin puisque j’ai du mettre dans mon web.config un moyen de s’authentifier en anonyme à partir d’un compte existant dans l’AD pour que le client puisse tester l’appli à distance.

Et donc forcément en utilisant le HttpContext.Current.User.Name, j’avais une string vide. Et l’override que j’ai tenté de faire a été perdu au bout de X sec (ou minutes).

Problème résolu B) en désactivant le flag d’auth anonyme du web.config (qui était juste nécessaire pour les tests à distance).