1.简介

1.什么是cookie:cookie是一种能够让网站服务器把少量数据(4kb左右)存储到客户端的硬盘或内存。并且读可以取出来的一种技术。

2.当你浏览某网站时,由web服务器放置于你硬盘上的一个非常小的文本文件,它可以记录你的用户id、浏览过的网页或者停留的时间等网站想要你保存的信息。当你再次通过浏览器访问该网站时,浏览器会自动将属于该网站的cookie发送到服务器去,服务器通过读取cookie,得知你的相关信息,就可以做出相应的动作。比如,显示欢迎你的小标题,不用填写帐号密码直接登录等。。
3.不同的浏览器存储的cookie位置是也不一样的。cookie文件的信息是不安全的,所以cookie里面的数据最好加密。
4.浏览器保存cookie数据有2中形式:浏览器的内存中,浏览器所在的电脑硬盘中。

从本质上讲,它可以看作是你的身份证。但Cookies不能作为代码执行,也不会传送病毒,且为你所专有,并只能由提供它的服务器来读取。保存的信息片断以“名/值”对(name-value
pairs)的形式储存,一个“名/值”对仅仅是一条命名的数据。一个网站只能取得它放在你的电脑中的信息,它无法从其它的Cookies文件中取得信息,也无法得到你的电脑上的其它任何东西。(摘自网络)

并非所有浏览器都支持。数据信息是以文本的形式保存在客户端计算机。

2.Cookie的基本用法

(1) 将Cookie写入浏览器:

  1. HttpCookie makeCookie = new HttpCookie("myCookie");//括号里面写的是Cookie的名称
  2.  
  3. 3 makeCookie.Value = this.TextBox1.Text;//这个是Cookie的值
  4.  
  5. Response.Cookies.Add(makeCookie);//添加cookie变量

(2)读取Cookie的值

  1. HttpCookie readCookie = Request.Cookies["myCookie"];//读取的是使用Request返回的值
  2. 2 TextBox2.Text = readCookie.Value;

 (3)设置cookie的有效期

  1. HttpCookie cookie = new HttpCookie("name","Elaine"); //创建cookie的实例。
  2. cookie.Expires = DateTime.Now.AddDays();//设置cookie的过期时间,5天后过期,自动清除文件
  3. Response.Cookies.Add(cookie);//将创建的cookie文件输入到浏览器端
  4. Response.Write(Request.Cookies["name"].Value); //读取cookie文件中存储的值
  1. (4)删除Cookie,没有特定的方法,只需要让它的有效期失效就行了   
  1. cookie.Expires = DateTime.Now.AddMonths(-); //cookie的销毁

(5)Cookie的其他属性

  1. HttpCookie makecookie = new HttpCookie("myCookie");
  2.  
  3. 指定Cookie的名称:makecookie.Name
  4.  
  5. 指定Cookie的值: makecookie.Value
  6.  
  7. 指定Cookie的路径:makecookie.Path;

(6)Cookie加密

  1. Response.Cookies["strPWD"].Value = FormsAuthentication.HashPasswordForStoringInConfigFile(加密字符串, "md5");

3.cookie读写原理
Cookies集合是附属于Response对象及Request对象的数据集合,使用时需要在前面加上Response或Request。

用于给客户机发送Cookies的语法通常为:

当给不存在的Cookies集合设置时,就会在客户机创建,如果该Cookies己存在,则会被代替。由于Cookies是作为HTTP传输的头信息的一部分发给客户机的,所以向客户机发送Cookies的代码一般放在发送给浏览器的HTML文件的标记之前。

如果用户要读取Cookies,则必须使用Request对象的Cookies集合,其使用方法是:

需要注意的是,只有在服务器未被下载任何数据给浏览器前,浏览器才能与Server进行Cookies集合的数据交换,一旦浏览器开始接收Server所下载的数据,Cookies的数据交换则停止,为了避免错误,要在程序和前面加上response.Buffer=True。

4.怎么查看Cookie的位置

打开IE》Internet选项》常规》

5.代码示例

案例一:

下面来完成一个登陆实例:

总共有两个页面,一个登陆页面,一个主页;

页面效果:

提示:

首先在登陆页前台的HTML代码里面的head标记里面的Title添加ID=”pageTitle

还有需要在web.config中把<appSettings/>改为以下结果:

  1. <appSettings>
  2. <!--
  3. 新添加的内容!
  4. -->
  5. <add key="WebTitle" value="Elaine00登陆实例"/>
  6. <add key="MsgTitle" value="Elaine00登陆测试"/>
  7. </appSettings>

  

具体代码:

登陆页:

前台:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="CookieLogin.aspx.cs" Inherits="Cookie" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml" >
  6. <head runat="server">
  7. <title id="PageTitle">登陆页</title>
  8. </head>
  9. <body>
  10. <form id="form1" runat="server">
  11. <div>
  12. <table style="width: 367px">
  13. <tr>
  14. <td colspan="" style="height: 17px">
  15. 用户登录</td>
  16. </tr>
  17. <tr>
  18. <td colspan="" style="width: 116px; height: 18px">
  19. 登录名称:</td>
  20. <td style="height: 18px">
  21. <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
  22. </tr>
  23. <tr>
  24. <td colspan="" style="width: 116px">
  25. 密码:</td>
  26. <td>
  27. <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></td>
  28. </tr>
  29. <tr>
  30. <td colspan="" style="width: 116px">
  31. </td>
  32. <td>
  33. <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="登录" />
  34. <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="重置" /></td>
  35. </tr>
  36. </table>
  37.  
  38. </div>
  39. </form>
  40. </body>
  41. </html>

后台:

  1. using System;
  2. using System.Web;
  3.  
  4. public partial class Cookie : System.Web.UI.Page
  5. {
  6. protected void Page_Load(object sender, EventArgs e)
  7. {
  8. PageTitle.Text = System.Configuration.ConfigurationSettings.AppSettings["WebTitle"];
  9. }
  10. protected void Button1_Click(object sender, EventArgs e)
  11. {
  12. if (TextBox1.Text.Trim() != "" && TextBox2.Text.Trim() != "")
  13. {
  14. HttpCookie cookieAdminCode = new HttpCookie("CookAdminCode");
  15. cookieAdminCode["AdminCode"] = TextBox1.Text;
  16. cookieAdminCode["PWD"] = TextBox2.Text;
  17. cookieAdminCode.Expires.AddDays();
  18.  
  19. Response.Cookies.Add(cookieAdminCode);
  20. Response.Redirect("Main.aspx");
  21. }
  22. else
  23. {
  24. MessageBox("对不起,请输入用户名或者密码!");
  25. }
  26. }
  27. #region MessageBox(string Message)
  28. private void MessageBox(string Message)
  29. {
  30. string msgTitle = System.Configuration.ConfigurationSettings.AppSettings["MsgTitle"].Trim();
  31. Response.Write("<script language=javascript>alert('" + msgTitle + "\\n\\n" + Message + "')</script>");//"\\n"一个斜线表示转义字符,一个表示于n在一起表示换行符号
  32. }
  33. #endregion
  34. protected void Button2_Click(object sender, EventArgs e)
  35. {
  36. TextBox1.Text = TextBox2.Text = "";
  37. }
  38. }

主页:

前台:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Main.aspx.cs" Inherits="Main" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml" >
  6. <head runat="server">
  7. <title>主页</title>
  8. </head>
  9. <body>
  10. <form id="form1" runat="server">
  11. <div>
  12.  
  13. </div>
  14. </form>
  15. </body>
  16. </html>

后台:

  1. using System;
  2. using System.Web;
  3.  
  4. public partial class Main : System.Web.UI.Page
  5. {
  6. protected void Page_Load(object sender, EventArgs e)
  7. {
  8. HttpCookie cookieAdminCode = Request.Cookies["CookAdminCode"];
  9. string Adminname = cookieAdminCode.Values["AdminCode"].Trim();
  10. string pwd = cookieAdminCode.Values["PWD"].Trim();
  11. if (Adminname== "Elaine00" && pwd== "")
  12. {
  13. MessageBox("登录成功!");
  14. Response.Write("欢迎" + Adminname + "登录本系统!您的密码是:" + pwd);
  15. }
  16. else
  17. {
  18. MessageBox("对不起!身份验证失败请重试!");
  19. Response.Write("<script language=javascript>window.location.href='CookieLogin.aspx'</script>");
  20. }
  21. }
  22. private void MessageBox(string Message)
  23. {
  24. // string msgTitle = System.Configuration.ConfigurationSettings.AppSettings["MsgTitle"].ToString().Trim();
  25. string msgTitle = System.Configuration.ConfigurationManager.AppSettings["MsgTitle"].Trim();
  26. Response.Write("<script language=javascript>alert('"+msgTitle+"\\n\\n"+Message+"')</script>");
  27. }
  28. }

案例二:

图示:

下面实现的是使用两个加密类来加密Cookie

首先定义一个EncryptString类;代码如下:

  1. using System;
  2. using System.IO;
  3. using System.Security.Cryptography;
  4.  
  5. namespace Test
  6. {
  7. public class EncryptString
  8. {
  9. private static byte[] Key64 = { , , , , , , , };
  10. private static byte[] IV64 = { , , , , , , , };
  11. private static byte[] Key192 = {, , , , , , , ,, ,
  12. ,, , , , ,, , , , , , , };
  13. private static byte[] IV192 = {, , , , , , , ,,
  14. , ,, , , , ,, , , , , , , };
  15. public static String Encrypt(String valueString)
  16. {
  17. if (valueString != "")
  18. { //定义DES的Provider
  19. DESCryptoServiceProvider desprovider =
  20. new DESCryptoServiceProvider();
  21. //定义内存流
  22. MemoryStream memoryStream = new MemoryStream();
  23. //定义加密流
  24. CryptoStream cryptoStream = new CryptoStream(memoryStream,
  25. desprovider.CreateEncryptor(Key64, IV64),
  26. CryptoStreamMode.Write);
  27. //定义写IO流
  28. StreamWriter writerStream = new StreamWriter(cryptoStream);
  29. //写入加密后的字符流
  30. writerStream.Write(valueString);
  31. writerStream.Flush();
  32. cryptoStream.FlushFinalBlock();
  33. memoryStream.Flush();
  34. //返回加密后的字符串
  35. return (Convert.ToBase64String(memoryStream.GetBuffer(), ,
  36. (int)memoryStream.Length));
  37. }
  38. return (null);
  39. }
  40. public static String Decrypt(String valueString)
  41. {
  42. if (valueString != "")
  43. { //定义DES的Provider
  44. DESCryptoServiceProvider desprovider =
  45. new DESCryptoServiceProvider();
  46. //转换解密的字符串为二进制
  47. byte[] buffer = Convert.FromBase64String(valueString);
  48. //定义内存流
  49. MemoryStream memoryStream = new MemoryStream();
  50. //定义加密流
  51. CryptoStream cryptoStream = new CryptoStream(memoryStream,
  52. desprovider.CreateEncryptor(Key64, IV64),
  53. CryptoStreamMode.Read);
  54. //定义读IO流
  55. StreamReader readerStream = new StreamReader(cryptoStream);
  56. //返回解密后的字符串
  57. return (readerStream.ReadToEnd());
  58. }
  59. return (null);
  60. }
  61. public static String EncryptTripleDES(String valueString)
  62. {
  63. if (valueString != "")
  64. { //定义TripleDES的Provider
  65. TripleDESCryptoServiceProvider triprovider =
  66. new TripleDESCryptoServiceProvider();
  67. //定义内存流
  68. MemoryStream memoryStream = new MemoryStream();
  69. //定义加密流
  70. CryptoStream cryptoStream = new CryptoStream(memoryStream,
  71. triprovider.CreateEncryptor(Key192, IV192),
  72. CryptoStreamMode.Write);
  73. //定义写IO流
  74. StreamWriter writerStream = new StreamWriter(cryptoStream);
  75. //写入加密后的字符流
  76. writerStream.Write(valueString);
  77. writerStream.Flush();
  78. cryptoStream.FlushFinalBlock();
  79. memoryStream.Flush();
  80. //返回加密后的字符串
  81. return (Convert.ToBase64String(memoryStream.GetBuffer(), ,
  82. (int)memoryStream.Length));
  83. }
  84. return (null);
  85. }
  86. public static String DecryptTripleDES(String valueString)
  87. {
  88. if (valueString != "")
  89. { //定义TripleDES的Provider
  90. TripleDESCryptoServiceProvider triprovider =
  91. new TripleDESCryptoServiceProvider();
  92. //转换解密的字符串为二进制
  93. byte[] buffer = Convert.FromBase64String(valueString);
  94. //定义内存流
  95. MemoryStream memoryStream = new MemoryStream();
  96. //定义加密流
  97.  
  98. CryptoStream cryptoStream = new CryptoStream(memoryStream,
  99. triprovider.CreateEncryptor(Key64, IV64),
  100. CryptoStreamMode.Read);
  101. //定义读IO流
  102. StreamReader readerStream = new StreamReader(cryptoStream);
  103. //返回解密后的字符串
  104. return (readerStream.ReadToEnd());
  105. }
  106. return (null);
  107. }
  108. }
  109. }

再定义一个CookieEncrypt的加密类;代码如下:

  1. using System;
  2. using System.Web;
  3.  
  4. namespace Test
  5. {
  6. public class CookieEncrypt
  7. {
  8. public static void SetCookie(HttpCookie cookie)
  9. { //设置Cookie
  10. HttpContext.Current.Response.Cookies.Set(cookie);
  11. }
  12. public static void SetCookie(String key, String valueString)
  13. { //设置加密后的Cookie
  14. key = HttpContext.Current.Server.UrlEncode(key);
  15. valueString = HttpContext.Current.Server.UrlEncode(valueString);
  16. HttpCookie cookie = new HttpCookie(key, valueString);
  17. SetCookie(cookie);
  18. }
  19. public static void SetCookie(String key, String valueString,
  20. DateTime expires)
  21. { //设置加密后的Cookie,并设置Cookie的有效时间
  22. key = HttpContext.Current.Server.UrlEncode(key);
  23. valueString = HttpContext.Current.Server.UrlEncode(valueString);
  24. HttpCookie cookie = new HttpCookie(key, valueString);
  25. cookie.Expires = expires;
  26. SetCookie(cookie);
  27. }
  28. public static void SetTripleDESEncryptedCookie(String key,
  29. String valueString)
  30. { //设置使用TripleDES加密后的Cookie
  31. key = EncryptString.EncryptTripleDES(key);
  32. valueString = EncryptString.EncryptTripleDES(valueString);
  33. SetCookie(key, valueString);
  34. }
  35. public static void SetTripleDESEncryptedCookie(String key,
  36. String valueString, DateTime expires)
  37. { //设置使用TripleDES加密后的Cookie,并设置Cookie的有效时间
  38. key = EncryptString.EncryptTripleDES(key);
  39. valueString = EncryptString.EncryptTripleDES(valueString);
  40. SetCookie(key, valueString, expires);
  41. }
  42.  
  43. public static void SetEncryptedCookie(String key, String valueString)
  44. { //设置使用DES加密后的Cookie
  45. key = EncryptString.Encrypt(key);
  46. valueString = EncryptString.Encrypt(valueString);
  47. SetCookie(key, valueString);
  48. }
  49. public static void SetEncryptedCookie(String key,
  50. String valueString, DateTime expires)
  51. { //设置使用DES加密后的Cookie,并设置Cookie的有效时间
  52. key = EncryptString.Encrypt(key);
  53. valueString = EncryptString.Encrypt(valueString);
  54. SetCookie(key, valueString, expires);
  55. }
  56. public static String GetTripleDESEncryptedCookieValue(String key)
  57. { //获取使用TripleDES解密后的Cookie
  58. key = EncryptString.EncryptTripleDES(key);
  59. String valueString = GetCookieValue(key);
  60. valueString = EncryptString.DecryptTripleDES(valueString);
  61. return (valueString);
  62. }
  63. public static String GetEncryptedCookieValue(String key)
  64. { //获取使用DES解密后的Cookie
  65. key = EncryptString.Encrypt(key);
  66. String valueString = GetCookieValue(key);
  67. valueString = EncryptString.Decrypt(valueString);
  68. return (valueString);
  69. }
  70. public static HttpCookie GetCookie(String key)
  71. { //通过关键字获取Cookie
  72. key = HttpContext.Current.Server.UrlEncode(key);
  73. return (HttpContext.Current.Request.Cookies.Get(key));
  74. }
  75. public static String GetCookieValue(String key)
  76. { //通过关键字获取Cookie的value
  77. String valueString = GetCookie(key).Value;
  78. valueString = HttpContext.Current.Server.UrlDecode(valueString);
  79. return (valueString);
  80. }
  81. }
  82.  
  83. }

接着定义Test.aspx页面;代码如下:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="Test.Test" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head runat="server">
  7. <title></title>
  8. </head>
  9. <body>
  10. <form id="form1" runat="server">
  11. <div>
  12. 加密前的Cookie值:<asp:Label ID="myCookie" Runat="server"></asp:Label>
  13. <br />
  14. 使用DES加密后的Cookie值:<asp:Label ID="EncryptCookie" Runat="server"></asp:Label>
  15. <br />
  16. 使用TripleDES加密后的Cookie值:<asp:Label ID="TripleDESCookie" Runat="server"></asp:Label>
  17. </div>
  18. </form>
  19. </body>
  20. </html>

接着定义Test.aspx.cs代码:

  1. using System;
  2. using System.Web;
  3.  
  4. namespace Test
  5. {
  6. public partial class Test : System.Web.UI.Page
  7. {
  8. protected void Page_Load(object sender, EventArgs e)
  9. {
  10. //调用函数EncryptMyCookies()获取Cookie的原始值和加密后的值
  11. if (!Page.IsPostBack) { EncryptMyCookies(); }
  12. }
  13. //获取cookie的值加密前和加密后的值,并获取
  14. private void EncryptMyCookies()
  15. {
  16. var myNameCookie = new HttpCookie("myName", "Elaine");
  17. Response.Cookies.Add(myNameCookie);
  18. //获取Cookie的原始值
  19. var httpCookie = HttpContext.Current.Response.Cookies["myName"];
  20. if (httpCookie != null)
  21. myCookie.Text = httpCookie.Value; //获取使用DES加密后Cookie的值
  22. EncryptCookie.Text = EncryptString.Encrypt(myCookie.Text); //获取使用TripleDES加密后Cookie的值
  23. TripleDESCookie.Text = EncryptString.EncryptTripleDES(myCookie.Text);
  24. }
  25. }
  26. }

小结:使用Cookie很方便,但是记得加密是重点~~

Cookie学习笔记的更多相关文章

  1. Cookie学习笔记二:Cookie实例

    今天说说刚刚学到的两个Cookie的最经典应用:自己主动登录和购物车设置 一:自己主动登录 须要两个页面:login.jsp与index.jsp,login.jsp用来输出登录信息,index.jsp ...

  2. 【转载】HTTP Cookie学习笔记

    什么是cookie? cookie是什么?是饼干,小甜点? No! No! No! 我今天要总结的cookie并不是你所想的小甜心,我这里要说的cookie是Web开发中的一个重要的"武器& ...

  3. Session、Cookie 学习笔记

    在开始今天的博文之前首先为自己庆祝一下自己有了三个粉丝,也有了同僚的评论,说实话因为这个开心了好久!哈哈,好了在开始今天的正题之前,首先大家需要了解以下几点: a. HTTP 协议是无状态的协议,WE ...

  4. [原创]java WEB学习笔记30:Cookie Demo 之显示最近浏览的记录

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. [原创]java WEB学习笔记29:Cookie Demo 之自动登录

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. [原创]java WEB学习笔记28: 会话与状态管理Cookie 机制

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. Python3+Selenium3+webdriver学习笔记11(cookie处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记11(cookie处理)'''from selenium im ...

  8. ASP.Net开发基础温故知新学习笔记

    申明:本文是学习2014版ASP.Net视频教程的学习笔记,仅供本人复习之用,也没有发布到博客园首页. 一.一般处理程序基础 (1)表单提交注意点: ①GET通过URL,POST通过报文体: ②需在H ...

  9. python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容

    python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...

随机推荐

  1. Unity3D Mecanim :Body Mask的使用、 角色Retargeting原理分析、Apply RootMotion

    一.Body Mask的使用 1.1.配置好骨骼后通过Muscles来微调角色骨骼中的运动范围,以避免角色在动画中的不正确的叠加或失真等现象. 1.2.身体遮罩BodyMask更形象的描述就是身体的开 ...

  2. idea如何打war包?(部署tomcat后具有class文件)

  3. intellij idea如何快速格式化代码

    选中代码,一键格式化代碼: Ctrl+Alt+L

  4. Flask详解

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...

  5. 从Spring到SpringBoot构建WEB MVC核心配置详解

    目录 理解Spring WEB MVC架构的演变 认识Spring WEB MVC 传统时代的Spring WEB MVC 新时代Spring WEB MVC SpringBoot简化WEB MVC开 ...

  6. java基础/一个类A继承了类B,那么A就叫做B的派生类或子类,B就叫基类或超类。

    类重复,pulic class demo1 和class demo1 重复 无主类, 在cmd中输入命令: SET CLASSPATH=. (等号后为英文点符号),即可设置解释的路径为当前路径. 再次 ...

  7. OpenCV学习笔记之课后习题练习3-4

    练习:创建一个大小为100*100的三通道RGB图像.将它的元素全部置0.使用指针算法以(20,5)与(40,20)为顶点绘制一个绿色平面. 参考博文:blog.csdn.net/qq_2077736 ...

  8. 极大既然估计和高斯分布推导最小二乘、LASSO、Ridge回归

    最小二乘法可以从Cost/Loss function角度去想,这是统计(机器)学习里面一个重要概念,一般建立模型就是让loss function最小,而最小二乘法可以认为是 loss function ...

  9. firmware 固件

    COMPPUTER SCIENCE AN OVERVIEW 11th Edition firmware 固件 boot loader 引导程序 device driver 设备驱动程序 Basic I ...

  10. java---rce

    http://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-app ...