关于用户碰到需要登录才能看到的网页,当登录进去之后的一段代码。我想问的是:Request.QueryString["ReturnUrl"].ToString();这个代码QueryString["ReturnUrl"],什么时候加进去的啊?是系统自动添加的吗?只要没登录进去,转到login.aspx之后系统自动添加?
if (Page.IsValid)
        {
            UserInfo user = new UserInfo();
            user = UserDB.PLogin(Security.Encrypt3DES(txtEmail.Text.Trim()), Security.Encrypt(txtPassword.Text.Trim()));
            if (user != null)
            {
                //string strRedirectURL = FormsAuthentication.GetRedirectUrl(txtEmail.Text.Trim(), false);
                //HttpCookie myCookie = FormsAuthentication.GetAuthCookie(txtEmail.Text.Trim(), false);                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.txtEmail.Text.Trim(), DateTime.Now, DateTime.Now.AddMinutes(30), true, user.RoleID, FormsAuthentication.FormsCookiePath);
                
                string hash = FormsAuthentication.Encrypt(ticket);                HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
                if (ticket.IsPersistent)
                {
                    cookie.Expires = ticket.Expiration;
                }
                Response.Cookies.Add(cookie);
                string returnUrl = Request.QueryString["ReturnUrl"].ToString();
                if (returnUrl == null)
                {
                    returnUrl="phome.aspx";
                }
                Response.Redirect(returnUrl);
                //FormsAuthentication.SetAuthCookie(txtEmail.Text.Trim(),false);
                //FormsAuthentication.RedirectFromLoginPage(txtEmail.Text.Trim(), false);
            }
            else
            {
                lblLoginFailed.Text = "用户名或密码错误,请重新输入";
            }
        }       

解决方案 »

  1.   

    如果你完全自己实现的话,
    是需要自己增加的.
    应该在那个验证页上加
    即在需要验证的页上发现未登陆时,
    首页取得当前地址,将地址以GET方式传给登陆页,
    即login.aspx?ReturnUrl=你获取的地址
    然后从定向到login.aspx?ReturnUrl=你获取的地址
    在login.aspx验证成功后,在取出ReturnUrl后的地址
    即你所写的Request.QueryString["ReturnUrl"]
    在重定向到Request.QueryString["ReturnUrl"]即可
      

  2.   

    打错字了,如果你完全自己实现的话, 
    是需要自己增加的. 
    应该在那个验证页上加 
    即在需要验证的页上发现未登陆时, 
    首先(刚才打成首页了)取得当前地址,将地址以GET方式传给登陆页, 
    即login.aspx?ReturnUrl=你获取的地址 
    然后从定向到login.aspx?ReturnUrl=你获取的地址 
    在login.aspx验证成功后,在取出ReturnUrl后的地址 
    即你所写的Request.QueryString["ReturnUrl"] 
    在重定向到Request.QueryString["ReturnUrl"]即可
      

  3.   

    ReturnUrl不是应该在到达login.aspx之前就通过QueryString被添加到了吗?那也就是说在那些用户不能随便浏览的页面都需要加["ReturnUrl"] ?
      

  4.   

    我可不可以不用理它?不去考虑要在什么页面添加returnUrl?
      

  5.   

    你不需要用QueryString它加什么,
    你要做的是在去login.aspx之前先获取当前的网址,
    然后string returnUrl="login.aspx?returnUrl=获取的网址";
    然后重定向到returnUrl上,可以使用Response.Redirect(returnUrl)
    在到达login.aspx之后并且用户成功验证后,
    用Request.QueryString["ReturnUrl"]取出returnUrl,
    然后在重定向回去即可例如Response.Redirect(Request.QueryString["ReturnUrl"])
    当然了,应该先判断Request.QueryString["ReturnUrl"]!=null的
      

  6.   

    这样不是太麻烦了吗?那还不如用:FormsAuthentication.GetRedirectUrl,这个方法直接可以得到returnUrl啊。你说的还得用:“string returnUrl="login.aspx?returnUrl=获取的网址"; ”岂不是很麻烦?
      

  7.   

    在登录时查询用户信息。直接通过response.redirect转向相关页面就可。
      

  8.   


      if(Session["Name"]!=null && Session["Name"].ToString()!="")
            {
    }
    else
    {
     Response.Redirect("Login.aspx?OldUrl=default.aspx");
    }login.aspx
     if (!this.Page.IsPostBack)
            {
                ViewState["OldUrl"] = Request.Params["OldUrl"];         
            }
    //登录按钮
      if (ViewState["OldUrl"] != null)
                    {
                        string url = ViewState["OldUrl"].ToString();
                        ViewState["OldUrl"] = null;
                        Response.Redirect(url);
                    }
      

  9.   

    楼上的,我想用的是.NET的规范。7楼的,response.redirect并不能找到原先的。你说的应该是:FormsAuthentication.RedirectFromLoginPage().
    不过这个过程包括了好多过程。我主要是自己想写里面的过程。
      

  10.   

    FormsAuthentication.GetRedirectUrl(),这个方法好象也不行啊,这样它会把我自己建立的ticket给覆盖掉。晕倒。难道真得在每个页面给“string returnUrl="login.aspx?returnUrl=获取的网址"”?
      

  11.   

    我怎么感觉楼像是刚接触asp.net呢?
    我认为,楼主还是去好好学习一下理论在来问问题!
    除非你使用Membership或自己实现了Membership类,
    FormsAuthentication.GetRedirectUrl()才有效,
    否刚你需要自己获取当前的URL
    至于是否每个页面都要加,这样看你情况的,
    你为什么不处理Global.asax文件!
      

  12.   

    比方说:动态超链接显示地址的时候 http://www.reyoung.cn/new/newinfo.aspx?ReturnUrl=2
    ReturnUrl就是在超链接起始页面发送的,2是这篇文章的主键发送到了新闻主页newinfo.aspx,它要显示正文,所以需要一个主键来取得单条数据,所以需要这个ID为2的文章数据..所以就Request.QueryString["ReturnUrl"].ToString();QueryString在链接内能看到,纯粹是为了页面展示的时候传值用的.
      

  13.   

    已经搞定。是系统自动会加上returnUrl的。