2009-06-16 4 views
0

J'utilise le code MSDN suivant sur ma page maître pour détecter si le navigateur accepte les cookies:redirect récursive à la page de gestionnaire d'erreurs

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!this.IsPostBack) { 
     if(Request.QueryString["CookieTest"] == null) { 
      Response.Cookies["TestCookie"].Value = "Test"; 
      Response.Redirect("CookieCheck.aspx.redirect=" + Server.UrlEncode(Request.Url.ToString()))); 
     } 
     else if((string)Request.QueryString["Test"] == "passed") { 
      // my stuff... 
     } 
    } 
} 

Le CookieCheck.aspx contient les éléments suivants:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(Request.Cookies["TestCookie"] == null) 
     Response.Redirect(Request.QueryString["redirect"] + "?Test=notPassed", true); 
    else 
     Response.Redirect(Request.QueryString["redirect"] + "?Test=passed", true); 
} 

Au sein le web.config i ont défini les éléments suivants:

<customErrors mode="On" defaultRedirect="Error.aspx" /> 

maintenant, la reconnaissance des biscuits œuvres Eh bien, mais j'ai ce problème: Chaque fois qu'une erreur se produit sur la page et je devrais être redirigé vers Error.aspx (et cela a fonctionné avant toute chose de détection de cookie), la redirection semble coincée dans une boucle infinie et ajoute de plus en plus ? Test = transmis "à l'URL. Je devrais mentionner que le Errors.aspx a également la même page principale et effectue ainsi également la vérification de biscuit. Cependant, je n'ai aucune idée pourquoi la redirection ne s'arrête pas. Existe-t-il un moyen de résoudre ce problème autre que d'exclure la page Errors.aspx d'avoir la page maître? Merci beaucoup.

Répondre

1

Si la page CookieCheck.aspx utilise également la même page maître, elle continuera à rediriger de manière récursive. Assurez-vous que CookieCheck.aspx n'utilise pas la même page MasterPage. Je recommande plutôt de ne pas utiliser MasterPages pour cela, les pages maîtres par conception sont pour l'héritage visuel et non l'héritage de code, si vous souhaitez faire un type spécial de pages qui vérifie la capacité du navigateur à utiliser les cookies, vous pouvez une nouvelle classe de base pour ces pages

public abstract class CookieEnabledPage : Page 
{ 
} 

et ajoutez votre logique à cette classe, alors à chaque fois que vous devez faire une nouvelle page avec ce comportement, vous héritez de cette classe de base. Je pense que c'est une façon beaucoup plus propre de faire ce que vous voulez.

+0

Non, le CookieCheck.aspx n'a pas de page maître, ce n'est donc pas la raison. Votre approche avec la nouvelle classe de base semble très propre et raisonnable, je considérerai celui-ci. – noisecoder

0

Je suppose que la page maître (ou la combinaison masterpage-error.aspx) déclenche une exception qui déclenche une redirection vers error.aspx, ce qui entraîne à son tour le redémarrage de la page master et une nouvelle exception. La concaténation de "? Test = passé" est presque certainement un effet secondaire de réinviter le test de cookie chaque fois qu'une redirection d'erreur se produit. Je suggère d'allumer le débogueur et de définir un point d'arrêt sur Page_Load dans Masterpage.aspx.cs et de le parcourir jusqu'à ce que vous soyez redirigé vers la page d'erreur (la dernière ligne qui est exécutée est celle qui déclenche l'exception).

+0

Je viens de vérifier celui-ci, et je ne pense pas que ce soit la raison. C'est plutôt comme si elle changeait constamment entre la page d'erreur page_load, page_load de la page et la page cookietest sans aucune raison. – noisecoder