2013-03-27 11 views
6

Ich bin ziemlich neu in .NET. Ich mache eine Website, die einen Admin-Bereich hat, der nur für angemeldete Benutzer sichtbar sein sollte. Ich habe den Login-Code erstellt und sobald ein Benutzer authentifiziert ist, gebe ich ihnen eine Session-Variable. Meine Frage ist: Gibt es eine effizientere Möglichkeit, die Sitzungsvariable zu überprüfen, anstatt die folgende Funktion auf jeder Seite zu haben?Sitzung auf jeder Seite überprüfen?

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

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

danke nett!

+0

Sie könnten die Funktion checkSession() in einer Klasse haben, die ihrerseits cls.checkSession() aufrufen und ein bool zurückgeben kann; – Csharp

+0

Sie müssen bei 'Form Authentication' bleiben, die' Cookie' verwendet –

+0

Warum "wahr"? Verwenden Sie stattdessen true. –

Antwort

5

, wenn Sie mit einem MasterPage können Sie den Überprüfungscode in der MasterPage's Page_Load Ereignis setzen, wenn nicht entweder die Global.asax oder eine benutzerdefinierte HttpModule und setzen Sie den cheking Code innerhalb der der AcquireRequestState Ereignishandler für die erste und das PostRequestHandlerExecute Ereignisbehandlungsroutine für den zweiten

Exmaple mit 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

danke! Ich denke, das ist die beste Lösung für mich. – Dashsa

+1

ERR_TOO_MANY_REDIRECTS – Elshan

+0

Bei der Weiterleitung zu default.aspx, immer noch nicht protokolliert, so Redirect erneut auf default.aspx – Snote

2

leiten Ihre Seiten aus einer benutzerdefinierten Klasse, die durch das Hinzufügen Ihrer Sitzung Prüfcodes

jetzt alle Ihrer Seiten haben die Validierung

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.. 
} 
} 

etc

Überschreibung der Load-Methode von Seite leitet ..

+1

Es wäre nützlich, ein Codebeispiel zu haben, das dies veranschaulicht. –

+0

Ich arbeite an der – RollRoll

1

Sie könnten Ihre Seite zu einer Klasse machen, die von einer Basisklasse erbt, die nach angemeldeten Benutzern sucht.

3

Sie sollten wahrscheinlich betrachten Formularauthentifizierung verwenden:
http://www.asp.net/web-forms/videos/authentication/using-basic-forms-authentication-in-aspnet

Sie eine Seite konfigurieren können, oder den Ordner immer genehmigungspflichtig, so dass die Laufzeitpflege dieser Anforderung nehmen, anstatt Sie manuell überprüfen zu müssen.

+1

Forms-Authentifizierung ist auch ein besser abgerundetes Sicherheitssystem und enthält mehrere Vorteile gegenüber der einfachen Überprüfung der Sitzung, siehe: http://support.microsoft.com/kb/910443 – Liam

1

Eine gute Möglichkeit, die Formularauthentifizierung in ASP.Net zu verstehen, ist das Erstellen einer brandneuen Website. Gehen Sie in Visual Studio und erstellen Sie Neues Projekt, wählen Sie Web und dann ASP.NET Web Application. Überprüfen Sie es im Account-Ordner, um die Prozess- und ASP.Net-Methoden zu verstehen.

0

Sie können BasePage erstellen und alle Ihre Seite von dieser Basisseite übernehmen, legen Sie die Funktion in Ihrer Basepage fest.

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

Ihre Seite

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

Eine andere Lösung:

In Ihrem Http-Modul, erstellen Principal (Rollen) und Identität, um Authentifizierung und Autorisierung functionnalities zu setzen, in der http-Modul Thesen anhängen Informationen zum aktuellen Thread.

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

1. Weg: 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. Weg: Sie können die gleiche Sitzungsverwaltung in Master-Seite haben. Seitenladeereignis

Hoffe, das hilft.

Verwandte Themen