ASP.NET 安全认证——用Form 表单认证实现单点登录(下)

来源:互联网 发布:内部排序算法比较 编辑:程序博客网 时间:2024/05/16 19:27
十二、        Cookie 在 ASP.NET 中的用法

大家也许和我一样,很少在 ASP.NET 中使用 Cookie ,传参数呀,存变量呀,用的比较多的是 Session ViewState 以及隐藏控件,有的干脆用“ ? ”的请求方式。 1、  Cookie 存放的目录

Cookie 是存放在客户端的东东,放在“Temporary Internet Files”目录,所以说存在安全性的问题。大伙可通过以下方式找到具体位置:打开控制面板 Internet 选项 常规 Internet 临时文件 设置 即可看到“当前位置”,→ 点击“查看文件”将直接打开该文件夹,你也可以点击“移动文件夹”变更它所在的位置。参照下图(http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm04.jpg http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm05.jpg):

a

b

      2、  Cookie 的有效期

      2、  Cookie 的有效期

从上图我们可以清楚的看到每个 Cookie 文档的“截止期”(即为有效期)。在有效期内,当登录计算机的用户 Administrator 再次访问 172.meibu.com 时,那么 IE 就会在请求页面的同时,连同上述的名称为“Cookie:administrator@172.meibu.com”的Cookie 文档内容一起发送给服务器。

若该文档包含多个 Cookie 的值时,截止期则以最后的失效期为准。 3、  Cookie 的类型

这里我们按有效期来分,分为两种: a)         即时型

指的是关闭浏览器(所有浏览 172.meibu.com IE)后,Cookie 便失效,此类 Cookie 不会在“Temporary Internet Files”目录出现。其实它也有截止期的,为“0001-01-01 b)        持久型

就是已指定具体“截止期”的,能够在“Temporary Internet Files”目录里面找到的 Cookie 4、  Cookie 的内容

双击打开“Cookie:administrator@172.meibu.com”,我们看到以下内容,如下图(http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm06.jpg):

c  

             上图中,“■”是换行符,你若是要打破什么锅来问我到底是怎么知道的话。我倒是会很乐意的告诉你:这就是经验!偶从学习 C# 那刻起,就拿第一个 Windows 程序 —— 记事本 来开刀,保存文档时得来的经验。

       所以服务器读出来的格式如下图(http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm07.jpg):

e  

5、  ASP.NET 页面发放 Cookie

发送上述 Cookie .cs 代码为:

              System.Web.HttpCookie ck = new HttpCookie("ckValue0");

              ck["Author"] ="CityHunter";

              ck.Expires = System.DateTime.Now.AddMinutes(10);//若不指定,则为即时型 Cookie

//ck.Path="/FormTest/ManageSys"; // 设置 Cookie 的虚拟路径,注意一定要以“/”开头,否则为无效 Cookie ;请大家自行看一下它与在客房端的 Cookie 文档“名称”与 “Internet 地址”的关系

              Response.Cookies.Add(ck); 

              ck = new HttpCookie("ckValue1"); // 重新新建一个名为 ckValue1 Cookie

              ck.Expires = System.DateTime.Now.AddMinutes(20);   // 即刻起 20 分钟后失效

              ck["E_Mail"] ="cityhunter172@126.com";         // 设置 ckValue1 中的 E_Mail

              ck["PersonalWeb"] ="172.meibu.com";

     Response.Cookies.Add(ck);   //添加此 Cookie

  • 6、  取回已发放 Cookie 的值

           Response.Write(Request.Cookies["ckValue0"]["Author"]+"<br>");//用不着说明了吧

           Response.Write(Request.Cookies["ckValue1"]["E_Mail"]+"<br>");

           Response.Write(Request.Cookies["ckValue1"]["PersonalWeb"]);

           好久没有出作业啦(何出此言?),这第三篇呀,可是花了偶两个星期的业余时间调试、总结、撰写哪,都说时光贵如金,不知我花的这些时间能换来多少银子?换银子,我看是没指望啦,能得到阁下的一句评论,偶也满足了。记住,你的评论就是偶继续写下去的动力。

           作业:给 Cookie 赋于以下值,怎样得到它的正确值

                  ck["str1"] ="2222";

                  ck["str"] ="str0=11111&str1=223";

    可以肯定的是Request.Cookies["ckValue1"]["str"] 得不到 str0=11111&str1=223这个字串,大家不妨试一下 Request.Cookies["ckValue1"]["str1"] 会得到意想不到的字串哟。

    提示:使用 Server.UrlEncode()Server.UrlDecode()

  • 十三、        发放永久性的验证 Cookie

    终于……终于……最后一个章节,蓦然回首,洋洋洒洒十二章。没想到年少时写不完作文的偶,居然也能编出几千余字的文章来呀,不得不佩服偶自己呀!再回首,一大片晕倒的人……。永远到底有多远?永久究竟是多久?只有天知道

    大家登录 CSDN的时候是否留意到一个“2 周内不用再登录”的复选框,它又是怎么做到的呢?大家是否曾遇到过这样的困惑:在执行System.Web.Security.FormsAuthentication.SetAuthCookie 时明明已指定createPersistentCookie true 为何关闭浏览器仍不能直接访问网站?下面我们就这个问题给大家解释一下,且介绍如何手工创建身份验证票并加入 Cookie 中。

         System.Web.Security.FormsAuthenticationTicket tk = new System.Web.Security.FormsAuthenticationTicket(

             1,                 // 指定版本号:可随意指定

    "Admin", // 登录用户名:对应 Web.config <allow users="Admin" /> users 属性

             System.DateTime.Now,   // 发布时间

             System.DateTime.Now.AddYears(100),   // 失效时间:100 年以后,够永够久了吧

    false,   // 是否为持久 Cookie:尚未发现有何用,至少目前偶还不知,下面会有说明

    " 测试用户数据"//用户数据:可用 ((System.Web.Security.FormsIdentity)User.Identity).Ticket.UserData 获取

             );

    string str = System.Web.Security.FormsAuthentication.Encrypt(tk);// 加密身份验票

                 

         // 声明一个 Cookie,名称为 Web.config <forms name=".APSX" /> name 属性,对应的值为身份验票加密后的字串

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

                 

         // 指定 Cookie Web.config <forms path="/" /> path 属性,不指定则默认为“/

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

    // 此句非常重要,少了的话,就算此 Cookie 在身份验票中指定为持久性 Cookie ,也只是即时型的 Cookie 关闭浏览器后就失效;因此上面我说:我是真的还不知在身份验票中指定为持久性 Cookie 有何用。

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

    Response.Cookies.Add(ck); //添加至客房端 

  •  

    f  

     

    d  

     

          2、  Cookie 的有效期

     
    原创粉丝点击