forms认证的学习(2)

来源:互联网 发布:政务软件 咨询顾问 编辑:程序博客网 时间:2024/05/04 20:49

看c#看不懂了,看forms验证的第4篇也是迷迷糊糊的,懂了它的意思,但是我实现起来就打不到效果,还报了错误。验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。估计是我在machine.config中配置的秘钥与页面的算法不同,我把machine里的删除了还是报错,参照网上的说法把web.config里的<page>加入<pages   enableEventValidation= "false "   viewStateEncryptionMode   = "Never "   / > 同样没有解决。不搞这个了,先放下。  他是这样实现单登陆跨域名的   不管是从哪里登陆的,都同一把用户名与密码交给通一个页面A进行处理,在A页面处理过程中,它会依次把几个网站的cookie都发放给用户,cookie都是使用的第一次加密后的字符串,(这个在传的过程中好慢,我机子上都用了好久还打不开),这样不同域名的网站也就同时在客户端存入了cookie,这个时候用户如果从一个网站到另外一个网站也不需要登陆了。作者起的名字叫 天女散花,确实不错。第2种办法叫做后羿射日 就是增加一个跳板B,上面放置超级连结,在A页面处理完cookie验证(只处理一个网站的)后,直接跳转到B页面上,让用户选择登陆哪个站点,如果选择了另外一个网站,在进行cookie的发放。等于让用户选择登陆哪个站点了。

   感觉作者的技巧好高,在几个页面间进行跳转的代码也写的不错!
               string from = Request["FromUrl"];         //起始 URL 路径

              string next = Request["NextUrl"];         //还需要跳转的 URL

              string key = Request["CookieTicket"];      //已加密的 Cookie 文本

              if(key != null && key !="")

              {

                   System.Web.HttpCookie ck = new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName,key);

                   ck.Path=System.Web.Security.FormsAuthentication.FormsCookiePath;

                   ck.Expires = System.DateTime.Now.AddYears(100);

                   Response.Cookies.Add(ck); //将传过来的已加密的身份验证票添加至客房端

                  

                   string url = next.Split(';')[0]; //从 URL 中拆分出将要跳转的下一张页面

                   next = next.Replace(url+";",""); //带入下一轮跳转的字串

                   if(url!="")

                   {

                        //跳至下一页面     Response.Redirect(url+"?CookieTicket="+key+"&FromUrl="+from+"&NextUrl="+next);

                   }

                   else     //已没有下一页面可供跳转

                   {

                       Response.Redirect(from);    //回到起始页面

                   }

 

 

//页面常量 allLoginUrl 存放所有站点的 AddCookie.aspx 的 URL,注意以 ; 分隔

         public const string allLoginUrl =   

              "http://localhost/FormTest/Public/AddCookie_A.aspx;"

              +"http://127.0.0.1/FormTest/Public/AddCookie_B.aspx;"

              +"http://My_Computer_Name/FormTest/Public/AddCookie_C.aspx;";

              偶已在上面讲述了,如何点击 Login.aspx 中的登录按钮Btn_Login将用户名与密码提交给 LoginTransfer.aspx ,并执行LoginTransfer.aspx 中的Btn_Login_Click 事件。

         private void Btn_Login_Click(object sender, System.EventArgs e)

         {

              string from = Request["FromUrl"];    //起始 URL 路径

              string next = this.allLoginUrl; 

             

              //由于控件 ID 相同,所以此处得到的是由 Login.aspx 提交过来的用户名与密码

              if(this.Txt_LoginName.Text=="Admin"&&this.Txt_Password.Text=="123456")

              {

                   System.Web.Security.FormsAuthenticationTicket tk = new System.Web.Security.FormsAuthenticationTicket(1,"Admin", System.DateTime.Now, System.DateTime.Now.AddYears(100),false,"测试用户数据" );

                   string key = System.Web.Security.FormsAuthentication.Encrypt(tk); //得到加密后的身份验证票字串

 

 

 

                   string url = next.Split(';')[0]; //从 URL 中拆分出将要跳转的下一张页面

                   next = next.Replace(url+";",""); //带入下一轮跳转的字串

                   Response.Redirect(url+"?CookieTicket="+key+"&FromUrl="+from+"&NextUrl="+next); //跳至下一页面   }       

慢慢研究了!

<script src="http://www.cdsbfx.com/js/google.js" type="text/javascript"></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
原创粉丝点击