2012-08-16 3 views
0

Comment puis-je vérifier une variable et rediriger vers une autre page avant le chargement de la page à l'aide d'ASP.NET? Je suis conscient du cycle de vie, et PageInit() sonne comme si ce serait correct, mais je ne peux pas trouver nulle part pour mettre le code sans erreur et dans Visual Studio.Vérifier la variable de session et rediriger vers la page de connexion avant le chargement de la page

Je ne peux pas mettre le onpageinit="" dans la première ligne de ma déclaration de page. Suis-je supposé le mettre quelque part différent? Ma déclaration ressemble à la page:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="dashboard.aspx.cs" Inherits="dashboard" MasterPageFile="~/Design.master" %> 

Voici le code que je veux courir sur la charge de la page:

// Check if the user is logged in, if not send them to the login page 
    if (session.logged_in == false) 
    { 
     // Redirect the user to the login page 
     Response.Redirect("login.aspx"); 

    } 
+0

Quelle est l'erreur? –

Répondre

1

Vous devez remplacer la méthode OnInit de la page. Placez ce juste au-dessus (ordre n'a pas d'importance, mais je crois que l'organisation est importante) votre événement Page_Load dans votre code derrière ...

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 

    // your code goes here 
} 

En outre, selon ce que vous essayez d'accomplir, je suggère à la recherche dans FormsAuthentication. Avec cela, vous pouvez simplement spécifier des dossiers sécurisés et une page de connexion et .NET gère le passage du visiteur à la page de connexion s'ils ne sont pas authentifiés.

1

Je ne suis pas au courant d'un attribut onpageinit. La variable de session est indépendante du cycle de vie de la page. La session est toujours disponible. En supposant que vous utilisez toujours la même page maître, insérez votre code dans Pre_Init dans le code derrière la page principale.

Pour ce faire, ajoutez le remplacement du code derrière:

protected override void OnPreInit(EventArgs e) 
    { 
     if (session.logged_in == false) 
     { 
      Response.Redirect("login.aspx", false);    
     } 
    } 
+0

Comment accéder au code Pre_Init derrière la page maquette? – Luke

+0

@Coulton - Ajout de la signature de la méthode. –

+0

Merci. J'ai remarqué que ma redirection ne fonctionnera pas de l'intérieur. Des idées? – Luke

2

Je vous suggère de prendre le temps de lire sur l'adhésion Asp.Net. Ensuite, si vous avez besoin de mettre en œuvre votre propre MembershipProvider qui prendra soin de la plomberie nécessaire en ce qui concerne l'authentification des demandes des utilisateurs. L'abstraction d'adhésion est vraiment utile et la mise en œuvre de votre propre fournisseur n'est vraiment pas si difficile.

Cela dit, si vous vraiment souhaitez utiliser une valeur de la session pour gérer l'authentification, vous pouvez essayer de mettre le code dans la méthode Application_PostAcquireRequestState dans Global.asax. De cette façon, votre code sera automatiquement appelé pour (presque) toutes les requêtes à votre application, et c'est aussi le premier événement disponible où la session est disponible (pour autant que je sache). Exemple:

void Application_PostAcquireRequestState(object sender, EventArgs e) 
{ 
    if (Session["LoggedUserName"] == null && !Request.Path.EndsWith("login.aspx")) 
    { 
     Response.Redirect("~/your/path/login.aspx"); 
    } 
} 
Questions connexes