asp.net学习教程:ASP.NET实现登录后返回请求页
来源:学生作业帮助网 编辑:作业帮 时间:2024/05/03 05:44:38 ASP.NET
在web编程中会涉及到有的页面需要登录后才能访问,所以我编写了一个基类(Adminbasepage)用来判断诸如session,Cookies是否存在来控制页面是否允许访问。若不能访问就自动转到登录页面。而我所写的登录页面又是转到固定的页面,所以问题来了,如何转到上次请求的页面?
1.首先尝试了使用 Request.UrlReferrer
(1)首先在Load事件中写以下代码
1 2 3 4 5 6 7 8 9 10 | protected void Page_Load( object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.UrlReferrer!= null )
{
ViewState[ "UrlReferrer" ]=Request.UrlReferrer.ToString();
}
}
} |
(2)在登录事件中写以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | protected void Signin()
{
//在这里实现用户及密码验证完成后
/**************************
* 此处代码省略......
***************************/
if (ViewState[ "UrlReferrer" ]!= null )
{
//转到请求页
Response.Redirect(ViewState[ "UrlReferrer" ].ToString());
}
else
{
//转到默认页
Response.Redirect( "Default.aspx" );
}
} |
表面上应该可以实现了,但是事实并非如此,由于我的基类写的是在PreLoad事件中来判断Session,Cookies等信息,如果不存在则转到登录页面。所以在请求页面的Load事件前就转到了登录页面,这样Request.UrlReferrer的值是为空的。参考了stswordman的博客,他是这样写的:
在使用Request.UrlReferrer时还要注意:
(1).如果上一页面使用document.location方法导航到当前页面,Request.UrlReferrer返回空值
(2).如果有 A,B 两个页面,在浏览器中直接请求A页面,在A页面的中Page_Load事件中导航到 B 页面,则Request.UrlReferrer返回空。因为 在Page_load事件中页面还未初始化,所以无法记录当前页的信息,导航到B页面也就无法获得上一页面的信息
(3).点击刷新按钮不会改变Request.UrlReferrer
这个办法不行,于是我决定采用Request.QueryString来解决该问题。
2.采用Request.QueryString
这个方法的关键在于如何获取请求页面的Url,让后将该页面的URl传到登录页面,在登录成功后转到该Url。
(1)在验证基类(Adminbasepage)中写如下代码
1 2 3 4 5 | protected override void OnInit(EventArgs e)
{
base .OnInit(e);
this .PreLoad += new EventHandler(BaseValidate);
} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | protected void BaseValidate( object sender, EventArgs e)
{
if (Request.Cookies[ "manager" ] != null )
{
// To do someting your want
}
else
{
string PermissionUrl = VirtualPathUtility.ToAppRelative(Request.Url.AbsolutePath); //关键
Response.Redirect( "Signin.aspx?purl=" + Server.UrlEncode(PermissionUrl));
}
} |
(2)在登录页面的登录事件最后实现跳转
1 2 3 4 5 6 7 8 | if (Request.QueryString[ "purl" ] == null )
{
Response.Redirect( "Default.aspx" );
} else
{
Response.Redirect(Server.UrlDecode(Request.QueryString[ "purl" ].ToString()));
} |
这里要注意的是,如果你使用了Server.UrlEncode(),务必记住要将其解码Server.UrlDecode().既然这种方法能实现的话,那只要将请求页面的URL传到登录页面,用Session,Cookies也是可以实现的。
ASP.NET