asp.net实例登录后返回登录前的页面

1.首先尝试了使用 Request.UrlReferrer

(1)首先在Load事件中写以下代码

 代码如下 复制代码
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Request.UrlReferrer!=null)
            {
                 ViewState["UrlReferrer"]=Request.UrlReferrer.ToString();
            }
        }
    }

2)在登录事件中写以下代码

 代码如下 复制代码
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)中写如下代码

 代码如下 复制代码

protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        this.PreLoad += new EventHandler(BaseValidate);
     }

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));
        }

    }

在登录页面的登录事件最后实现跳转

 代码如下 复制代码

if (Request.QueryString["purl"] == null)
      {
        Response.Redirect("Default.aspx");
      }
else
      {
       Response.Redirect(Server.UrlDecode(Request.QueryString["purl"].ToString()));
      }

时间: 2024-10-31 13:42:10

asp.net实例登录后返回登录前的页面的相关文章

django如何在用户登录后返回到原来来页面,并保持登陆状态

问题描述 django如何在用户登录后返回到原来来页面,并保持登陆状态 各位朋友们好,现在用django做一个用户登录页面,希望能够在用户登录后返回到原来来页面,并保持登陆状态,网上找到了下面这个方法 def login_user(request): if request.method == 'GET': #记住来源的url,如果没有则设置为首页('/') request.session['login_from'] = request.META.get('HTTP_REFERER', '/')

winform 加webbrowser 做的一个登录程序,怎么才能实现登录后返回当前浏览的页面,最好帮忙将这个功能实现,就是无法返回当前页面。

问题描述 usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Xml;usingmshtml;namespaceWindowsApplication1{publicpartialclassForm1:Form{publicFo

edittext-android想实现注册后返回登录界面自动填写刚刚的账号密码信息

问题描述 android想实现注册后返回登录界面自动填写刚刚的账号密码信息 代码如下 值传过来了 但是赋值不成功 protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Toast.makeText(getAppli

Session失效后 或者是未登录提示登录后返回之前的页面,而不是主界面!

问题描述 Session失效后 或者是未登录提示登录后返回之前的页面,而不是主界面! 求代码,只知道需要过滤器,但是具体不知道怎么写,求大神代码! 解决方案 参考http://bbs.csdn.net/topics/360180431

WordPress修改登录或注销后返回之前访问的页面

首先,我们获取当前访问的页面地址: $url_this = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]; 然后在登录和登出的函数中添加该地址作为参数: //登录<?php echo wp_login_url($url_this); ?>  //登出<?php echo wp_logout_url($url_this); ?> 这样一来,登录或登出后都会返回之前访问的页面. 如果你使用后台默认

跳转-c# winfrom 窗体登录 再返回登录窗口的问题

问题描述 c# winfrom 窗体登录 再返回登录窗口的问题 c# winfrom 窗体登录 再返回登录窗口的问题A是登录窗体 B是首页 从A窗体跳到B窗体 在a的登录按钮上写 B a=new B(); b.show(); this.visble=false; b窗体上有个返回按钮 点返回 怎么关闭B窗体 然后重新回到A登录窗体呢 解决方案 B a=new B(); this.Visble=false; a.ShowDialog(); this.Visble = true; 解决方案二: 这个

post登录-android Volley Post登录时返回登录页面,不能登录进去

问题描述 android Volley Post登录时返回登录页面,不能登录进去 使用Volley框架 Post登录时能返回html页面,但现显示的是我尚未登录 代码如下,抓到的post包在下面 public class MainActivity extends Activity { TextView show; private String myCookies; @Override protected void onCreate(Bundle savedInstanceState) { sup

Spring Security4.1.3实现拦截登录后向登录页面跳转方式(redirect或forward)返回被拦截界面

一.看下内部原理 简化后的认证过程分为7步: 用户访问网站,打开了一个链接(origin url). 请求发送给服务器,服务器判断用户请求了受保护的资源. 由于用户没有登录,服务器重定向到登录页面 填写表单,点击登录 浏览器将用户名密码以表单形式发送给服务器 服务器验证用户名密码.成功,进入到下一步.否则要求用户重新认证(第三步) 服务器对用户拥有的权限(角色)判定: 有权限,重定向到origin url; 权限不足,返回状态码403("forbidden"). 从第3步,我们可以知道

退出app再进后获取不到ContactList,但是退出登录后重新登录后又可以刷新出来

问题描述 而且第一次登录app会崩溃,再重新进又没有问题,求解 解决方案 你是怎么做的退出操作呢?杀死进程了吗?这个好友列表的获取是在MainActivity中执行的 asyncFetchContactsFromServer();方法,你看你退出再进入时执行了没有,和demo对比一下看看代码的执行有什么不同.解决方案二:同样问题,但第一次登录不会报错,不是杀死进程,正常退出后,再次登录引发空指针异常,位置:DemoHelper.getUserInfo(),如换用户登录,好友列表仍为上次登录用户的