2013-03-27 13 views
6

Sono abbastanza nuovo su. NET - Sto creando un sito che ha una sezione di amministrazione che dovrebbe essere visibile solo agli utenti registrati. Ho creato il codice di accesso e una volta che un utente è autenticato, quindi assegno loro una variabile di sessione. La mia domanda è: c'è un modo più efficiente per controllare la variabile di sessione piuttosto che avere la seguente funzione su ogni pagina?controlla la sessione in ogni pagina?

protected void Page_Load(object sender, EventArgs e) 
{ 
     checkSession(); 

} 
public void checkSession() 
{ 
    if (Session["LoggedIn"] != "true") 
    { 
     Response.Redirect("default.aspx"); 
    } 
} 

grazie gentilmente!

+0

potresti avere la funzione checkSession() in una classe, che a sua volta puoi chiamare cls.checkSession() e restituire un bool; – Csharp

+0

È necessario attenersi a 'Form Authentication' che utilizza' cookie' –

+0

Perché "true"? usa invece vero. –

risposta

5

se si utilizza un MasterPage si può mettere il codice di controllo nel caso in MasterPage's Page_Load se non utilizzare il Global.asax o un costume HttpModule e mettere il codice cheking all'interno del gestore AcquireRequestState evento per il prima e il gestore PostRequestHandlerExecute evento per il secondo

Exmaple con Global.asax

public class Global : System.Web.HttpApplication 
{ ... 
    void Application_AcquireRequestState(object sender, EventArgs e) 
    {    
     HttpContext context = HttpContext.Current; 
     // CheckSession() inlined 
     if (context.Session["LoggedIn"] != "true") 
     { 
      context.Response.Redirect("default.aspx"); 
     } 
    } 
    ... 
} 
+0

grazie! Penso che questa sia la soluzione migliore per me. – Dashsa

+1

ERR_TOO_MANY_REDIRECTS – Elshan

+0

Quando si reindirizza a default.aspx, non si è ancora effettuato il login, quindi reindirizzare nuovamente a default.aspx – Snote

2

derivare le pagine da una classe personalizzata che deriva da pagina

l'override del metodo Load aggiungendo la sessione di codice di controllo

ora tutte le pagine hanno la convalida

public class MyPage : System.Web.UI.Page 
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["yoursession"] != "true") 
    { 
    //code 
    } 
} 



public class yourCustomPage1 : MyPage 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    //you don't have to check or call any method.. 
} 
} 

public class yourCustomPage2 : MyPage 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    //you don't have to check or call any method.. 
} 
} 

ecc ..

+1

Sarebbe utile avere un esempio di codice che illustri questo. –

+0

Sto lavorando a quello – RollRoll

1

È possibile rendere la pagina una classe che eredita da una classe base che controlla gli utenti registrati.

3

Probabilmente si dovrebbe considerare l'utilizzo di autenticazione basata su form:
http://www.asp.net/web-forms/videos/authentication/using-basic-forms-authentication-in-aspnet

È possibile configurare una pagina o una cartella di richiedere sempre l'autorizzazione, in modo che il tempo di esecuzione si prenderà cura di tale obbligo, piuttosto che dover controllare manualmente.

+1

L'autenticazione basata su form è anche un sistema di sicurezza più completo e include diversi vantaggi rispetto al semplice controllo della sessione, vedere: http://support.microsoft.com/kb/910443 – Liam

1

Un buon modo per iniziare a capire l'autenticazione dei moduli in ASP.Net è la creazione di un nuovo sito web. Andare in Visual Studio e creare Nuovo progetto, selezionare Web, quindi Applicazione Web ASP.NET. Guardalo nella cartella Account per capire il processo e i metodi ASP.Net.

0

È possibile creare BasePage ed ereditare tutta la pagina da questa pagina di base, impostare la funzione nel proprio database.

public class BasePage : Page 
{ 
    protected void checkSession() 
    { 
    if (Session["LoggedIn"] != "true") 
    { 
     Response.Redirect("default.aspx"); 
    } 
    } 
} 

tua pagina

public partial class YourPage : BasePage 
{ 
.... 
} 

Un'altra soluzione:

Nel vostro modulo HTTP, creare Principal (ruoli) e identità al fine di impostare l'autenticazione ed autorizzazione functionnalities, nel vostro modulo HTTP attribuiscono tesi informazioni al thread corrente.

link: http://msdn.microsoft.com/en-us/library/system.security.principal.iidentity.isauthenticated.aspx

0
  public class BasePage : Page 
      { 
      protected void checkSession() 
       { 
        if (Session["LoggedIn"] == null) 
        { 
          Response.Redirect("~/default.aspx/"); 
        } 
       } 
      } 
0

1o modo: Global.asax.cs ADD

void Application_AcquireRequestState(object sender, EventArgs e) 
    { 
     HttpContext context = HttpContext.Current; 
     Page page = context.Handler as Page; 

     if ((string)context.Session["LoggedIn"] != "true" 
      && !(page.AppRelativeVirtualPath == "~/Default.aspx")) 
      context.Response.Redirect("default.aspx"); 
    } 

2 ° modo: è possibile avere la stessa gestione della sessione nella pagina mastro. Evento caricamento pagina.

Spero che questo aiuti.

Problemi correlati