2013-03-27 4 views
6

Я довольно новичок в .NET. Я создаю сайт, на котором есть раздел администратора, который должен отображаться только для зарегистрированных пользователей. Я создал код входа и как только пользователь аутентифицирован, я затем назначаю им переменную сеанса. Мой вопрос: есть ли более эффективный способ проверить переменную сеанса, а не иметь следующую функцию на каждой странице?проверить сеанс на каждой странице?

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

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

благодарите любезно!

+0

у вас может быть функция checkSession() в классе, которая в свою очередь вы можете вызвать cls.checkSession() и вернуть bool; – Csharp

+0

Вам нужно придерживаться 'Form Authentication', который использует' cookie' –

+0

Почему «true»? вместо этого используйте true. –

ответ

5

если вы используете MasterPage вы можете поместить код проверки в MasterPage's Page_Load случае, если не использовать либо Global.asax или пользовательские HttpModule и поместить код cheking внутри обработчика AcquireRequestState события для первый и обработчик события PostRequestHandlerExecute для второго

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

спасибо! Я думаю, что это лучшее решение для меня. – Dashsa

+1

ERR_TOO_MANY_REDIRECTS – Elshan

+0

При перенаправлении на default.aspx все равно не регистрируется, поэтому перенаправляет снова на default.aspx – Snote

2

Выведите свои страницы из пользовательского класса, который является производным от Page

переопределить метод Load, добавив сеансовый код проверки

теперь все ваши страницы имеют валидацию

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

и т.д .. .

+1

Было бы полезно иметь образец кода, который иллюстрирует это. –

+0

Я работаю над этим – RollRoll

1

Вы можете сделать свою страницу классом, который наследуется от базового класса, который проверяет наличие зарегистрированных пользователей.

3

Вы, вероятно, следует рассмотреть вопрос об использовании проверки подлинности форм:
http://www.asp.net/web-forms/videos/authentication/using-basic-forms-authentication-in-aspnet

Вы можете настроить страницу, или папка всегда требует авторизации, поэтому во время выполнения будет заботиться о это требование, а не вам приходится проверять вручную.

+1

. Аутентификация форм также является более хорошо округленной системой безопасности и включает в себя несколько преимуществ перед простой проверкой сеанса, см. Http://support.microsoft.com/kb/910443 – Liam

1

Хороший способ начать понимать, что аутентификация форм в ASP.Net создает совершенно новый сайт. Перейдите в Visual Studio и создайте новый проект, выберите «Веб», а затем веб-приложение ASP.NET. Проверьте это в папке Account, чтобы понять процесс и методы ASP.Net.

0

Вы можете создать BasePage и наследовать всю свою страницу с этой базовой страницы, установить функцию на вашей базовой странице.

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

Ваша страница

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

Другое решение:

В вашем модуле Http, создавать Principal (Roles) и идентичность для того, чтобы установить аутентификацию и авторизацию functionnalities, в модуле HTTP приложить тезисы информацию о текущей теме.

ссылка: 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

1st Way: 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-й способ: вы можете иметь такое же управление сеансом на главной странице. Событие загрузки страницы.

Надеюсь, это поможет.

Смежные вопросы