代码是我最大的快乐
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

FormsAuthentication初接触--感触颇多

Posted on 2011-03-08 20:31  distance  阅读(459)  评论(0编辑  收藏  举报

  今天刚刚接触了票据的知识,对于我这样的菜鸟都算不上的可以说是云里雾里--一点不假!倒也不是说知识有多么难,只是我对这个问题还没有多么深刻的认识!再加上刚刚接触.NET没有多久!对很多概念还是很容易混淆!

  今天学习中的看到了几篇参考博客,对我的帮助还是很大! 在这里分享一下!

  其实票据的概念不是很多,只是比较绕,总结起来无非就是创建多个验证,多个口令,多个服务端等,但是这样毕竟是比较繁琐的方法! 为了满足用户的体验,当然要求简单,内部工作繁琐也在所难免了! 参考博客中的讲述是Kerberos加密的原理! 这和票据的概念颇有些相似,原理大概都是一样的! 但是到了ASP.NET中,微软这个老江湖早就已经为我们做好了我们该做的,我们只需要简单的调用类库中所定义好的方法即可!

  票据可以很好的解决跨页面的请求处理! 之前老师给我们留下的问题是:如何实现跨页面的请求,而服务器是如何判断不同页面中的相同用户呢?

对我这等初学者来说,还真是难住我了,请各位大侠不要见笑!

  现在貌似有点明白了:

  假设有一个用户A,请求了一个登录,随后页面就跳转到了自己的主页,然而页面间有了跨越,但是服务器却应该清楚记得新的页面中请求者还是原来的用户A,而应该在服务器端中的Dictionary中取出A所对应的数据!其实在这其中,当A第一次请求页面的时候,服务器已经分配给了用户A一个票据,存放在Cookie中,而之后每次用户A再请求页面的时候都要带上得到这个票据来证明自己的身份,这样每次请求,服务器都可以认出自己所分配出去的票据,这样就可以很好实现跨页面请求了!

服务器做的工作:定义好ticket,随时准备发送给接收到请求request,并在下一次接收请求时检查该request是否有自己发布的票据

if (cookie != null)//表示通过验证
            {
                string cookieString = cookie.Value;//取得cookie中的票据的串

                try
                {
                    //转换为票据的实例
                    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookieString);

                    //检验票是否过期
                    if (!ticket.Expired)//没过期
                    {
                        name = ticket.Name;
                    }
                }
                catch (Exception ex)
                {
                    //记录日志
                    System.Diagnostics.Trace.WriteLine("解密用户票据时出错,错误信息:{0}", ex.Message);

                }

            }

用户的工作:接收response时接到cookie,里面存储有服务器发来的ticket,转换为string识别!

//将票据转换为串
                    string ticketString =//将票据转换为串
                    string ticketString =
                        FormsAuthentication.Encrypt(ticket);
                        FormsAuthentication.Encrypt(ticket);

态度决定事情的结果,态度决定人生的方向,态度决定别人对你的看法,态度能改变自己,也可以主观地去改变态度,改变的出发点就是你自己。--By Distance