建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

当前位置: 建站学 > 网站开发 > asp.net教程 >

ASP.NET实现登录后返回请求页

时间:2011-12-17 19:08来源: 作者: 点击:
在web编程中会涉及到有的页面需要登录后才能访问,所以我编写了一个基类(Adminbasepage)用来判断诸如session,Cookies是否存在来控制页面是否允许访问。若不能访问就自动转到登录页面。而我所写的登录页面又是转到固定的页面,所以问题来了,如何转到上次请求的页面? 1.首先

在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也是可以实现的。

(责任编辑:admin)
织梦二维码生成器
顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片