检查每个页面的会话?

时间:2013-03-27 15:20:56

标签: c# .net

我对.NET很陌生 - 我正在建立一个只有登录用户才能看到的管理部分的网站。 我创建了登录代码,一旦用户通过身份验证,我就会为它们分配一个会话变量。 我的问题是:有没有更有效的方法来检查会话变量,而不是在每个页面上都有以下功能?

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

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

非常感谢!

9 个答案:

答案 0 :(得分:5)

如果您使用MasterPage,如果不使用MasterPage's Page_Load或自定义Global.asax,则可以将检查代码放入HttpModule事件中,并输入检验码在第一个AcquireRequestState事件处理程序和第二个

PostRequestHandlerExecute事件处理程序中

Exxple with 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");
        }
    }
  ...
}

答案 1 :(得分:3)

您应该考虑使用表单身份验证:
http://www.asp.net/web-forms/videos/authentication/using-basic-forms-authentication-in-aspnet

您可以将页面或文件夹配置为始终需要授权,因此运行时将负责该要求,而不是您必须手动检查。

答案 2 :(得分: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..
 }
}

等...

答案 3 :(得分:2)

您可以使您的页面成为继承自检查登录用户的基类的类。

答案 4 :(得分:1)

开始理解ASP.Net中的表单身份验证的一个好方法是创建一个全新的网站。 进入Visual Studio并创建New Project,选择Web,然后选择ASP.NET Web Application。 在Account文件夹中查看它以了解进程和ASP.Net方法。

答案 5 :(得分:1)

您可以创建BasePage并从此基页继承您的所有页面,在您的基页中设置该功能。

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

你的页面

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

另一种解决方案:

在您的Http模块中,创建Principal(Roles)和Identity以设置身份验证和授权功能,在您的http模块中将这些信息附加到当前线程。

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

第一种方式: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");
    }

第二种方式:您可以在母版页中拥有相同的会话管理。页面加载事件。

希望这有帮助。

答案 8 :(得分:0)

您可以将此代码添加到GLOBAL.asax.cs中,这将检查会话是否为空,并且如果此请求是从“登录”页面初始化的,它将不会重定向,否则将陷入循环。

-7.105427357601E-15