我对.NET很陌生 - 我正在建立一个只有登录用户才能看到的管理部分的网站。 我创建了登录代码,一旦用户通过身份验证,我就会为它们分配一个会话变量。 我的问题是:有没有更有效的方法来检查会话变量,而不是在每个页面上都有以下功能?
protected void Page_Load(object sender, EventArgs e)
{
checkSession();
}
public void checkSession()
{
if (Session["LoggedIn"] != "true")
{
Response.Redirect("default.aspx");
}
}
非常感谢!
答案 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