none
forms验证页面无发跳转 RRS feed

  • 问题

  • 在项目的根目录下的webconfig
    <authentication mode="Forms">
          <forms name="login" loginUrl="Admin/login.aspx" protection="All" defaultUrl="Index.aspx" path="/">        
          </forms>
     </authentication>
    ---------------------------
    在Admin文件下的webconfig
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.web>
          <authorization>
           
    <!--?是不允许匿名访问-->

            <deny users="?" />
          </authorization>
        </system.web>
    </configuration>
    ------------------------------------------
    在Login.aspx页面的button按钮的代码
     protected void btnLogin_Click(object sender, ImageClickEventArgs e)
        {
             string chek = this.txtCheck.Text.ToString().Trim().ToLower();
            string session=Convert.ToString(Session["CheckCode"]).ToLower(); //验证码

            if (chek == session) //判断验证码是否为空
            {
                inslogin.User_Name = this.txtName.Text.ToString().Trim();
                inslogin.User_Pwd = this.txtPwd.Text.ToString().Trim();
                DataSet ds = inslogin.SelectUser();
                if (ds.Tables[0].Rows.Count > 0) //判断用户名和密码是否正确
                {
                    Session["user"] = ds.Tables[0].Rows[0][0].ToString();
                    //Response.Redirect("Index.aspx", true);
                    //Response.Write("<script>window.top.location='Index.aspx';</script>");
                   // FormsAuthentication.RedirectFromLoginPage(ds.Tables[0].Rows[0][0].ToString(), false); //此方法能转跳过去
                    //FormsAuthentication.RedirectToLoginPage();
                   //Response.Redirect("Index.aspx", false);
                    Response.Redirect("~/Admin/Index.aspx",false); //如果正确就转跳
                    //Server.Transfer("Index.aspx");            

                }
                else
                {
                    Response.Write("<script language='javascript'> alert('用户名密码错误!')</script>");
                }
            }
            else
            {
                Response.Write("<script language='javascript'> alert('验证码不正确')</script>");
            }
      }
    --------------------------------------------------------
    问题:
      当使用Response.redirect进行页面定位的时候,密码用户名正确,但是跳不过去,还是把login.aspx页面刷新一下。

    • 已移动 Raymond TangModerator 2010年1月4日 1:47 (发件人:.NET Framework 一般性问题讨论区)
    2010年1月2日 7:14

答案

  • 呵呵 大家都休息的 不是不理你啊
    你这个方法根本无法拒绝匿名的页面 需要 FormsAuthentication.RedirectFromLoginPage(ds.Tables[0].Rows[0][0].ToString(), false); 这个方法 有个条件是验证form创造cookie才能跳
    加上个     System.Web.Security.FormsAuthentication.SetAuthCookie("mldark", true); 才能用Response.Redirect("~/Admin/Index.aspx",false); 
          
    • 已标记为答案 平淡 2010年1月3日 8:46
    2010年1月2日 10:08
  • 毕竟是假日啊,不是所有人都在假日也上论坛的。
    您对这种表现有疑惑是因为您没有理解ASP.NET是以什么作为判断“是不是已经登录”的依据的:ASP.NET在其封装中使用一个特别的cookie来判断是不是有效的登录,您需要使用FormsAuthentication.RedirectFromLoginPage之类的方法来写入这个cookie。
    如果您不用ASP.NET设计好的方式去写入这种cookie,那么ASP.NET只会认为没有成功登录。

    如果您只是好奇想了解ASP.NET的原理,您可以作各种各样的实验,但如果您是在开发实际产品,您就应该避免亲自去操作这些东西——至少在您还不确定其工作原理的时候您不应该这样做。
    Most questions i'm interested in might have two or more possible answers i know or i don't know. So please read question carefully before you try to answer, and explan your question detailedly before asking for help. 很多看起来简单的问题都存在多种可能性,如果您不能详细的解释,别人就不能正确判断出您所遭遇的实际状况,因而不能给出最适合的解决办法。在您没有给出详细信息的情况下,施助者只有张贴大量有可能有关的解决办法。而您可能没有耐心阅读所有这些东西,在这种情况下您就客观地形成了对施助者的伤害——除非“施助者”并没有用心去尝试帮助您。 同样地,当您尝试解答一个看起来“好像遇到过”的问题的时候,您也需要详细地阅读和理解这个问题。如果您不了解问题的细节,您可能会给出不相关的或者无助于解决当前问题的解答。
    • 已标记为答案 平淡 2010年1月3日 8:46
    2010年1月2日 19:18
  • 非常感谢两位的回复,以及感谢以后回复的朋友。对于Nanalich朋友你说的话很对,我是对forms的验证没有完全理解。我是这样考虑的。我觉得forms验证有写入cookie的这种功能,但是不一定非要写cookie才能用forms验证。我不想通过写cookie来实现这种功能。如有什么好的方法。或者资料请告知,谢谢。


    这是设计规则 如果你不想要cookie 那也得不要web.config来拒绝匿名 用session判断当拒绝匿名即可
    • 已标记为答案 平淡 2010年1月3日 8:46
    2010年1月3日 4:56
  • 如果客户端禁止Cookie,那forms验证时写Cookie是否能写入成功。若成功给客户端写入Cookie,那么是不是我会在客户端的Cookie文件夹里面找到。 
    当客户端禁止cookie  asp.net会用url方式来创造cookie 有个缺陷是只要复制url 什么人都能用的  这个由你的web.config配置决定

    • 已标记为答案 平淡 2010年1月3日 8:46
    2010年1月3日 7:57
  • 若成功给客户端写入Cookie,那么是不是我会在客户端的Cookie文件夹里面找到?
    或者说怎么能找到我写的Cookie

    ie 选项 -----浏览历史纪录  设置  查看文件夹里面
    • 已标记为答案 平淡 2010年1月3日 8:45
    2010年1月3日 8:14

全部回复

  • 是不是我问的太简单了,都懒得理我?

    2010年1月2日 7:59
  • 无论多么简单还请大家不吝赐教,感激不尽。谢谢再谢谢
    2010年1月2日 8:00
  • 呵呵 大家都休息的 不是不理你啊
    你这个方法根本无法拒绝匿名的页面 需要 FormsAuthentication.RedirectFromLoginPage(ds.Tables[0].Rows[0][0].ToString(), false); 这个方法 有个条件是验证form创造cookie才能跳
    加上个     System.Web.Security.FormsAuthentication.SetAuthCookie("mldark", true); 才能用Response.Redirect("~/Admin/Index.aspx",false); 
          
    • 已标记为答案 平淡 2010年1月3日 8:46
    2010年1月2日 10:08
  • 毕竟是假日啊,不是所有人都在假日也上论坛的。
    您对这种表现有疑惑是因为您没有理解ASP.NET是以什么作为判断“是不是已经登录”的依据的:ASP.NET在其封装中使用一个特别的cookie来判断是不是有效的登录,您需要使用FormsAuthentication.RedirectFromLoginPage之类的方法来写入这个cookie。
    如果您不用ASP.NET设计好的方式去写入这种cookie,那么ASP.NET只会认为没有成功登录。

    如果您只是好奇想了解ASP.NET的原理,您可以作各种各样的实验,但如果您是在开发实际产品,您就应该避免亲自去操作这些东西——至少在您还不确定其工作原理的时候您不应该这样做。
    Most questions i'm interested in might have two or more possible answers i know or i don't know. So please read question carefully before you try to answer, and explan your question detailedly before asking for help. 很多看起来简单的问题都存在多种可能性,如果您不能详细的解释,别人就不能正确判断出您所遭遇的实际状况,因而不能给出最适合的解决办法。在您没有给出详细信息的情况下,施助者只有张贴大量有可能有关的解决办法。而您可能没有耐心阅读所有这些东西,在这种情况下您就客观地形成了对施助者的伤害——除非“施助者”并没有用心去尝试帮助您。 同样地,当您尝试解答一个看起来“好像遇到过”的问题的时候,您也需要详细地阅读和理解这个问题。如果您不了解问题的细节,您可能会给出不相关的或者无助于解决当前问题的解答。
    • 已标记为答案 平淡 2010年1月3日 8:46
    2010年1月2日 19:18
  • 非常感谢两位的回复,以及感谢以后回复的朋友。对于Nanalich朋友你说的话很对,我是对forms的验证没有完全理解。我是这样考虑的。我觉得forms验证有写入cookie的这种功能,但是不一定非要写cookie才能用forms验证。我不想通过写cookie来实现这种功能。如有什么好的方法。或者资料请告知,谢谢。

    2010年1月3日 2:01
  • 非常感谢两位的回复,以及感谢以后回复的朋友。对于Nanalich朋友你说的话很对,我是对forms的验证没有完全理解。我是这样考虑的。我觉得forms验证有写入cookie的这种功能,但是不一定非要写cookie才能用forms验证。我不想通过写cookie来实现这种功能。如有什么好的方法。或者资料请告知,谢谢。


    这是设计规则 如果你不想要cookie 那也得不要web.config来拒绝匿名 用session判断当拒绝匿名即可
    • 已标记为答案 平淡 2010年1月3日 8:46
    2010年1月3日 4:56
  • 还有个小问题,我看Nanalich所回复得有这么一句。“您对这种表现有疑惑是因为您没有理解ASP.NET是以什么作为判断“是不是已经登录”的依据的:ASP.NET在其封装中使用一个特别的cookie来判断是不是有效的登录”
    其中,这个特殊的Cookie,到底特殊是指的什么。它与一般的Cookie有何不同。最好能把两者的联系区别详细的说一下。谢谢。如果客户端禁止Cookie,那forms验证时写Cookie是否能写入成功。若成功给客户端写入Cookie,那么是不是我会在客户端的Cookie文件夹里面找到。问题很幼稚,还请不吝赐教,谢谢mldark.
    2010年1月3日 5:21
  • 如果客户端禁止Cookie,那forms验证时写Cookie是否能写入成功。若成功给客户端写入Cookie,那么是不是我会在客户端的Cookie文件夹里面找到。 
    当客户端禁止cookie  asp.net会用url方式来创造cookie 有个缺陷是只要复制url 什么人都能用的  这个由你的web.config配置决定

    • 已标记为答案 平淡 2010年1月3日 8:46
    2010年1月3日 7:57
  • 若成功给客户端写入Cookie,那么是不是我会在客户端的Cookie文件夹里面找到?
    或者说怎么能找到我写的Cookie
    2010年1月3日 8:07
  • 若成功给客户端写入Cookie,那么是不是我会在客户端的Cookie文件夹里面找到?
    或者说怎么能找到我写的Cookie

    ie 选项 -----浏览历史纪录  设置  查看文件夹里面
    • 已标记为答案 平淡 2010年1月3日 8:45
    2010年1月3日 8:14
  • 谢谢。!!!!-_-
    • 已标记为答案 平淡 2010年1月3日 8:45
    • 取消答案标记 平淡 2010年1月3日 8:45
    2010年1月3日 8:45