1.FormsAuthentication.GetRedirectUrl()和FormsAuthentication.RedirectFormLoginPage()的跟本区别是什么?请说的通俗一点,msdn上的解释没看懂!
2.我用form验证,根目录下有很多文件和文件夹,其中包括login.aspx和default.aspx两文件和B文件夹。如果用户直接登陆login.aspx通过验证,验证以后进入默认页B文件夹下的A.aspx页。但是如果直接访问B文件夹内的C.aspx,则进入login.aspx通过验证,验证以后就进入C.aspx。这样的效果该如何实现,语句怎么写?
3.if(FormsAuthentication.GetRedirectUrl(userid,flase).Endswith("default.aspx"))
     Response.Redirect("fff.aspx");
else
FormsAuthentication.RedirectFormLoginPage(userid,flase)
这个判断做是什么意思?有什么作用?

解决方案 »

  1.   

    返回导致重定向到登录页的原始请求的重定向 URL。如果没有原始 URL,则使用 Default.aspx。
    如果重定向 URL 指定其他服务器,则该方法还将身份验证票作为查询字符串的一部分返回。该方法可由需要亲自重定向而不是使用 RedirectFromLoginPage 重定向的应用程序使用。
      

  2.   

    if(FormsAuthentication.GetRedirectUrl(userid,flase).Endswith("default.aspx"))
         Response.Redirect("fff.aspx");
    elseFormsAuthentication.RedirectFormLoginPage(userid,flase) //将已验证身份的用户重定向回最初请求的 URL。
      

  3.   

    hedonister(冰戈)
    我问的区别FormsAuthentication.RedirectFormLoginPage()这个我也知道啊!
      

  4.   

    FormsAuthentication.GetRedirectUrl()
    返回的是最初请求页面的URL
    FormsAuthentication.RedirectFormLoginPage()
    这个方法是返回到最初请求的页面
      

  5.   

    if(FormsAuthentication.GetRedirectUrl(userid,flase).Endswith("default.aspx"))
         Response.Redirect("fff.aspx");
    else
    FormsAuthentication.RedirectFormLoginPage(userid,flase)
    -----------------------------------------------------------------------------
    这个判断是说验证后如果请求页是default.aspx,那么通过重定向到fff.aspx页,否则重定向到原请求页
      

  6.   

    我的一些理解:
    RedirectFormLoginPage方法是把通过验证的用户重定向到他最初请求的页面,比如用户最初请求c.aspx,但由于他没有通过身份验证,于是被自动重定向到了login.aspx进行身份验证,如果他输入的凭据通过了身份验证,就可以用此方法,从而将用户重定向到了c.aspx。GetRedirectUrl方法并不将通过身份验证的用户重定向到用户最初请求的页面,它只是返回最初请求页面的URL,是一个string型数据,比如http://yourapp/b/c.aspx。
    所以FormsAuthentication.GetRedirectUrl(userid,flase).Endswith("default.aspx")的意思就是把“http://yourapp/b/c.aspx”与“default.aspx”从末尾进行比较,如果相等,则为true,将执行Response.Redirect("fff.aspx");不等则为false,将执行FormsAuthentication.RedirectFormLoginPage(userid,flase)。对于2的情况,建议你把a.aspx改为default.aspx并放入应用程序的根文件夹中,然后在应用程序根目录下的web.config文件中加入下面的配置:
    <authorization>
             <deny users="?"/>   
    </authorization>
    这样只需运用
    FormsAuthentication.RedirectFormLoginPage(userid,flase)一句就可以实现“如果用户直接登陆login.aspx并通过验证,则进入默认页B文件夹下的A.aspx页”以及“如果直接访问B文件夹内的C.aspx,则进入login.aspx通过验证,验证以后就进入C.aspx”
      

  7.   

    楼上因为我的根目录下的default.aspx另有用处所以不能改!
    第二个问题的条件是不能变的,因为我在开发的时候遇到的问题!
      

  8.   

    对了,其实就用第3点那个判断就成了。if(FormsAuthentication.GetRedirectUrl(userid,flase).Endswith("default.aspx"))
         Response.Redirect("B/c.aspx");  //用户直接登陆login.aspx并通过验证
    else
    FormsAuthentication.RedirectFormLoginPage(userid,flase); //直接访问B文件夹内的C.aspx,则进入login.aspx通过验证,如果通过验证以后就进入C.aspx
      

  9.   

    1.FormsAuthentication.GetRedirectUrl()
    返回的是最初请求页面的URL
    FormsAuthentication.RedirectFormLoginPage()
    这个方法是返回到最初请求的页面
    楼上回答你应该明白了!
    2.if(FormsAuthentication.GetRedirectUrl(userid,flase).Endswith("B/A.aspx").ToString()==false)FormsAuthentication.RedirectFormLoginPage(userid,flase)
    else     Response.Redirect("../B/A.aspx");3.你应该明白了吧!以上的我没有是试!你自己试一下吧!不知道对不对!
      

  10.   

    上面写错了一点。对了,其实就用第3点那个判断就成了。if(FormsAuthentication.GetRedirectUrl(userid,flase).Endswith("default.aspx"))
         Response.Redirect("B/A.aspx");  //用户直接登陆login.aspx并通过验证,进入B文件夹下的A.aspx页
    else
    FormsAuthentication.RedirectFormLoginPage(userid,flase); //直接访问B文件夹内的C.aspx,则进入login.aspx通过验证,如果通过验证以后就进入C.aspx
      

  11.   

    我说的上面不是 zipo 啊,不要误会,我是说我自己。
      

  12.   

    zipo(我们) 
    if(FormsAuthentication.GetRedirectUrl(userid,flase).Endswith("B/A.aspx").ToString()==false)
    你这句行不行的通啊?
      

  13.   

    1.
    //仅仅是获得导向页的地址,一般在使用时候要判断一下这个地址,如果为空(登陆者本来就是直接访问了登陆页),那么手动导向到指定页面。
    FormsAuthentication.GetRedirectUrl()  //这个方法,你不用手动HttpCookie cookie = new HttpCookie();了,他内部都作了,这是根本区别。但这样的傻瓜的方法通常都不能满足大家的需求,比如我们无法控制Cookie中写些什么额外信息,比如登陆者的角色。
    FormsAuthentication.RedirectFormLoginPage()可以看看反编译代码:
    public static void RedirectFromLoginPage(string userName, bool createPersistentCookie, string strCookiePath)
    {
          FormsAuthentication.Initialize();
          if (userName == null)
          {
                return;
          }
          //下面设置了Cookie
          FormsAuthentication.SetAuthCookie(userName, createPersistentCookie, strCookiePath);
          //导航
          HttpContext.Current.Response.Redirect(FormsAuthentication.GetRedirectUrl(userName, createPersistentCookie), false);
    }
      

  14.   

    2.我用form验证,根目录下有很多文件和文件夹,其中包括login.aspx和default.aspx两文件和B文件夹。如果用户直接登陆login.aspx通过验证,验证以后进入默认页B文件夹下的A.aspx页。但是如果直接访问B文件夹内的C.aspx,则进入login.aspx通过验证,验证以后就进入C.aspx。这样的效果该如何实现,语句怎么写?
    -------------------------------
    这个问题,其实就是判断用户是从哪个页面来的,如果是从登陆页来的,那么专向A.aspx,如果是从别的页面来的,那么登陆后就转向原来欲访问的页面,right?
    so 只要GetRedirectUrl(),如果为string.Empty,那么说明是从登陆页来的,转向A.aspx。如果不为空,那么转向获得的地址。
    string url = xxx.GetRedirctUrl();
    if( url.Equals( string.Empty ) )
        Response.Redirect("A.aspx");
    else
        Response.Redirect( url );
      

  15.   

    3.if(FormsAuthentication.GetRedirectUrl(userid,flase).Endswith("default.aspx"))
         Response.Redirect("fff.aspx");
    else
    FormsAuthentication.RedirectFormLoginPage(userid,flase)
    这个判断做是什么意思?有什么作用?
    ----------------------------------------------------------------------
    这是别人的业务逻辑,没别的意思。他们就是要实现,如果是从default.aspx页来的,登陆后导航到fff.aspx,否则从哪儿来回哪儿去。
      

  16.   

    UP,我对FORM认证也不是全理解的
      

  17.   

    form验证我也搞不清楚是什么原理,它怎么知道哪些页面要验证,哪些不要啊,就是说,它怎么知道哪些是前台文件,哪些是后台文件。
      

  18.   

    很感谢 tonybaobao(Tony宝宝)
    我在判断GetRedirctUrl()是否为空的时候总是不成功?不知道为什么?
    具体应该怎么写哪?
    string url = FormsAuthentication.GetRedirctUrl();
    if( url.Equals( string.Empty ) )
        Response.Redirect("B/A.aspx");
    else
        Response.Redirect( url );
    这样写对吗?
      

  19.   

    注意GetRedirctUrl方法,如果没有原始 URL,则使用 Default.aspx
    所以,if(url.Equals(string.Empty)) 这句将永远为false
      

  20.   

    再问各位个小问题!
    我在用session验证的时候到每一页都要判断session["username"]是否为空~!
    如果我要是用了form验证是不是就不用每一页都要判断cookie是否为空了?????
      

  21.   

    我觉得frieda() 说的挺有道理的,谢了~~同时也帮我解决了一个定向URL的小问题~~