2013-06-15 2 views
1

J'ai deux applications Web asp.net partagées sur un serveur virtuel. Tout fonctionnait bien. J'ai dû passer à un nouveau serveur virtuel avec les mêmes spécifications chez un autre fournisseur.L'authentification basée sur les formulaires Asp.NET ne fonctionne pas dans IE9 ou 10

La première application de formulaire Web fonctionne très bien.

Le problème, la deuxième application de formulaire Web ne permettra pas à l'utilisateur d'être authentifié. J'utilise l'authentification basée sur les formulaires asp.net. Pour une raison quelconque, il n'émet pas le ticket d'authentification des formulaires. J'ai réexécuté le projet dans mon environnement de développement et l'authentification fonctionne très bien.

Je ne suis pas sûr si IIS est mal configuré ou si quelque chose d'autre est mal configuré. J'ai triplé le nouveau serveur avec l'ancien serveur et tous les paramètres d'IIS semblent être identiques. J'utilise asp.net 4.0 et j'utilise un en-tête d'hôte IIS pour différencier les demandes entre les deux sites. Après plusieurs heures de tests et de recherches, tout ce que j'ai pu conclure est que le deuxième site Web sur le serveur de production ne parvient pas à authentifier les utilisateurs dans Internet Explorer 9 & 10. Tous les autres navigateurs fonctionnent correctement. Lorsque vous exécutez le site Web en mode de compatibilité dans IE9 ou 10, cela fonctionne également.

Voici comment je lance les formulaires ticket d'authentification dans le code:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
       1, //Ticket Version 
       "", //Associated User Name 
       DateTime.Now, //Date/Time Issued 
       DateTime.Now.AddMinutes(60), //Time to expire 
       false, //Persistent Cookie 
       user_id, //User-Data --- User Role 
       FormsAuthentication.FormsCookiePath); // Cookie Path 

     string hash = FormsAuthentication.Encrypt(ticket); 
     HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash); 

     if (ticket.IsPersistent) 
     { 
      cookie.Expires = ticket.Expiration; 
     } 


    //Add cookie to the list 
    Response.Cookies.Add(cookie); 

Voici ma configuration d'authentification dans mon fichier web.config:

<authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" protection="All" timeout="90" path="/" name=".survey" requireSSL="false" slidingExpiration="true" defaultUrl="survey.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/> 
</authentication> 
<authorization> 
    <deny users="?"/> 
    <allow roles="Standard, Admin"/> 
</authorization> 

est ici l'autre chose. La première application de formulaire Web (celle qui fonctionne) utilise le même code d'authentification de base. Cela fonctionne très bien sur tous les navigateurs. La seule différence entre l'authentification de deux applications est que la première application (celle qui fonctionne) nécessite SSL.

C'est de loin l'erreur la plus unique que j'ai jamais rencontrée. S'il vous plaît laissez-moi savoir si vous avez un conseil ou si je peux vous fournir plus de détails.

Merci pour votre aide.

+0

Avez-vous des erreurs ou l'utilisateur n'est pas authentifié? Avez-vous testé sur différentes machines pour voir si le problème persiste? – rcdmk

+0

Je ne trouve pas d'erreurs et oui le problème est persistant. – user2487963

Répondre

0

Assurez-vous d'avoir les derniers correctifs pour .Net sur le serveur. J'ai déjà eu ce problème concernant la version d'IE, mais une fois que j'ai appliqué le correctif, il a commencé à fonctionner.

+0

Ça a marché! Merci. Chaque fois que j'essaie de cocher la case verte, il est indiqué que le dépassement de pile a une erreur. Je vais essayer sur un autre PC plus tard. Merci encore. – user2487963

+0

Vous êtes les bienvenus, heureux que cela a fonctionné! – albattran

Questions connexes