zoukankan      html  css  js  c++  java
  • Asp.net forms认证遇到的一个奇怪的问题和测试过程

    在很多asp.net项目中,都会采用forms认证,其内部的机制就是把用户数据加密后保存在一个基于cookie的票据FormsAuthenticationTicket中。我所在公司是好几家门店的,项目一上线之后,其中有一家门店,报告上来说:登录页面打得开,就是登录不了。起初还以为是用户输入有误,后来亲自测试之后,发现问题大了。如下是登录页面的代码:

    View Code
     FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                            1,
                            count,
                            DateTime.Now,
                            DateTime.Now.AddMinutes(10),
                            false,
                            "");
                        FormsAuthentication.SetAuthCooki(count,true);
                       Response.Redirect("~/main.aspx");

    webconfig代码:

            <authentication mode="Forms">
                <forms name="landrise_aspnet" path="/" loginUrl="~/Login.aspx" timeout="20" defaultUrl="~/Login.aspx"/>
            </authentication>


    main.aspx页面的代码:

    protected void Page_Load(object sender, EventArgs e)
            {
                if (!Request.IsAuthenticated)
                {
                    FormsAuthentication.RedirectToLoginPage();
                }
                else
                {
                    string user = Context.User.Identity.Name;
                }
            }

    为了避免用户名和密码输错,我把验证用户名和密码程序去掉
    用别的门店测试和我自己电脑上IE测试,均都可以转入main.aspx页面,但是用问题店就不可以。本人自己IE测试,都可以进入main.aspx

    现在用问题门店的电脑分别用火狐,IE6,chrome测试

    后来我考滤到有可能是机器系统的原因,然后我用易车网,汽车之家测试,这两个网站也是用asp.net开发的,也是用了forms认证,用问题门店的电脑登录这两个网页

    都没有任何问题,说明电脑的cookies是没有问题的。我再用Request.Browser.CookiesRequest.Browser.SupportsRedirectWithCookie。进行测试

    均为true;问题始终没有解决。还有一个奇怪的现象,有一段时间,用谷歌浏览器居然好了,再次编译又不行,当然这个现象只出现了两次。

    结论:

    1、我怀疑forms认证是否有bug。

    2、如果电脑系统问题,易车网,汽车之后为何可以?

    3、单步测试之中,user.Identity.Name一直为空。而且在所有电脑上都有可以。

    4、Context.User.Identity.IsAuthenticated在问题门店浏览器上一直为false,正常电脑上IE,火狐上测试为true。

    问题解决:

         有可能是问题门店的机器cookie异常,每次清除一下就是可以重新登录。后来在

    Vincent Yang(水平不错)

    的建议下,改用cookieless="useUrl"这样就解决了。

    用了AutoDetect还是不行,说明这个cookie是没有被禁用的,可能出现异常。

     最新的一项测试:

    代码改成:

      FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                            1,
                            count,
                            DateTime.Now,
                            DateTime.Now.AddMinutes(10),
                            false,
                            "");
                        string encTicket = FormsAuthentication.Encrypt(ticket);
                      // FormsAuthentication.SetAuthCookie(count, true);
                        Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
                       Response.Redirect("~/main.aspx");

    然后在web.config中把cookieless="useurl"改成cookieless="AutoDetect",这样又起作用了,我建议还是用这种方法。如果
    userUrl的话,C#代码还是要改成FormsAuthentication.SetAuthCookie(count, true);

  • 相关阅读:
    python学习(9)字典的基本应用
    python学习(8)实例:写一个简单商城购物车的代码
    python学习(7)关于列表操作相关命令以及浅复制深复制
    python学习(6)选择排序算法简单代码
    python学习(5)写一个二分算法的程序
    python学习(4)循环语句
    添加页面+正则+三级联动
    SSM整合多对多表关系
    dubbo整合ssm
    爬虫爬取文章
  • 原文地址:https://www.cnblogs.com/Anders888/p/2630280.html
Copyright © 2011-2022 走看看