Cookie学习笔记
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写入浏览器:
- HttpCookie makeCookie = new HttpCookie("myCookie");//括号里面写的是Cookie的名称
- 3 makeCookie.Value = this.TextBox1.Text;//这个是Cookie的值
- Response.Cookies.Add(makeCookie);//添加cookie变量
(2)读取Cookie的值
- HttpCookie readCookie = Request.Cookies["myCookie"];//读取的是使用Request返回的值
- 2 TextBox2.Text = readCookie.Value;
(3)设置cookie的有效期
- HttpCookie cookie = new HttpCookie("name","Elaine"); //创建cookie的实例。
- cookie.Expires = DateTime.Now.AddDays();//设置cookie的过期时间,5天后过期,自动清除文件
- Response.Cookies.Add(cookie);//将创建的cookie文件输入到浏览器端
- Response.Write(Request.Cookies["name"].Value); //读取cookie文件中存储的值
- (4)删除Cookie,没有特定的方法,只需要让它的有效期失效就行了
- cookie.Expires = DateTime.Now.AddMonths(-); //cookie的销毁
(5)Cookie的其他属性
- HttpCookie makecookie = new HttpCookie("myCookie");
- 指定Cookie的名称:makecookie.Name;
- 指定Cookie的值: makecookie.Value;
- 指定Cookie的路径:makecookie.Path;
(6)Cookie加密
- 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/>改为以下结果:
- <appSettings>
- <!--
- 新添加的内容!
- -->
- <add key="WebTitle" value="Elaine00登陆实例"/>
- <add key="MsgTitle" value="Elaine00登陆测试"/>
- </appSettings>
具体代码:
登陆页:
前台:
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="CookieLogin.aspx.cs" Inherits="Cookie" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title id="PageTitle">登陆页</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <table style="width: 367px">
- <tr>
- <td colspan="" style="height: 17px">
- 用户登录</td>
- </tr>
- <tr>
- <td colspan="" style="width: 116px; height: 18px">
- 登录名称:</td>
- <td style="height: 18px">
- <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
- </tr>
- <tr>
- <td colspan="" style="width: 116px">
- 密码:</td>
- <td>
- <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></td>
- </tr>
- <tr>
- <td colspan="" style="width: 116px">
- </td>
- <td>
- <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="登录" />
- <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="重置" /></td>
- </tr>
- </table>
- </div>
- </form>
- </body>
- </html>
后台:
- using System;
- using System.Web;
- public partial class Cookie : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- PageTitle.Text = System.Configuration.ConfigurationSettings.AppSettings["WebTitle"];
- }
- protected void Button1_Click(object sender, EventArgs e)
- {
- if (TextBox1.Text.Trim() != "" && TextBox2.Text.Trim() != "")
- {
- HttpCookie cookieAdminCode = new HttpCookie("CookAdminCode");
- cookieAdminCode["AdminCode"] = TextBox1.Text;
- cookieAdminCode["PWD"] = TextBox2.Text;
- cookieAdminCode.Expires.AddDays();
- Response.Cookies.Add(cookieAdminCode);
- Response.Redirect("Main.aspx");
- }
- else
- {
- MessageBox("对不起,请输入用户名或者密码!");
- }
- }
- #region MessageBox(string Message)
- private void MessageBox(string Message)
- {
- string msgTitle = System.Configuration.ConfigurationSettings.AppSettings["MsgTitle"].Trim();
- Response.Write("<script language=javascript>alert('" + msgTitle + "\\n\\n" + Message + "')</script>");//"\\n"一个斜线表示转义字符,一个表示于n在一起表示换行符号
- }
- #endregion
- protected void Button2_Click(object sender, EventArgs e)
- {
- TextBox1.Text = TextBox2.Text = "";
- }
- }
主页:
前台:
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Main.aspx.cs" Inherits="Main" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title>主页</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- </div>
- </form>
- </body>
- </html>
后台:
- using System;
- using System.Web;
- public partial class Main : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- HttpCookie cookieAdminCode = Request.Cookies["CookAdminCode"];
- string Adminname = cookieAdminCode.Values["AdminCode"].Trim();
- string pwd = cookieAdminCode.Values["PWD"].Trim();
- if (Adminname== "Elaine00" && pwd== "")
- {
- MessageBox("登录成功!");
- Response.Write("欢迎" + Adminname + "登录本系统!您的密码是:" + pwd);
- }
- else
- {
- MessageBox("对不起!身份验证失败请重试!");
- Response.Write("<script language=javascript>window.location.href='CookieLogin.aspx'</script>");
- }
- }
- private void MessageBox(string Message)
- {
- // string msgTitle = System.Configuration.ConfigurationSettings.AppSettings["MsgTitle"].ToString().Trim();
- string msgTitle = System.Configuration.ConfigurationManager.AppSettings["MsgTitle"].Trim();
- Response.Write("<script language=javascript>alert('"+msgTitle+"\\n\\n"+Message+"')</script>");
- }
- }
案例二:
图示:
下面实现的是使用两个加密类来加密Cookie
首先定义一个EncryptString类;代码如下:
- using System;
- using System.IO;
- using System.Security.Cryptography;
- namespace Test
- {
- public class EncryptString
- {
- private static byte[] Key64 = { , , , , , , , };
- private static byte[] IV64 = { , , , , , , , };
- private static byte[] Key192 = {, , , , , , , ,, ,
- ,, , , , ,, , , , , , , };
- private static byte[] IV192 = {, , , , , , , ,,
- , ,, , , , ,, , , , , , , };
- public static String Encrypt(String valueString)
- {
- if (valueString != "")
- { //定义DES的Provider
- DESCryptoServiceProvider desprovider =
- new DESCryptoServiceProvider();
- //定义内存流
- MemoryStream memoryStream = new MemoryStream();
- //定义加密流
- CryptoStream cryptoStream = new CryptoStream(memoryStream,
- desprovider.CreateEncryptor(Key64, IV64),
- CryptoStreamMode.Write);
- //定义写IO流
- StreamWriter writerStream = new StreamWriter(cryptoStream);
- //写入加密后的字符流
- writerStream.Write(valueString);
- writerStream.Flush();
- cryptoStream.FlushFinalBlock();
- memoryStream.Flush();
- //返回加密后的字符串
- return (Convert.ToBase64String(memoryStream.GetBuffer(), ,
- (int)memoryStream.Length));
- }
- return (null);
- }
- public static String Decrypt(String valueString)
- {
- if (valueString != "")
- { //定义DES的Provider
- DESCryptoServiceProvider desprovider =
- new DESCryptoServiceProvider();
- //转换解密的字符串为二进制
- byte[] buffer = Convert.FromBase64String(valueString);
- //定义内存流
- MemoryStream memoryStream = new MemoryStream();
- //定义加密流
- CryptoStream cryptoStream = new CryptoStream(memoryStream,
- desprovider.CreateEncryptor(Key64, IV64),
- CryptoStreamMode.Read);
- //定义读IO流
- StreamReader readerStream = new StreamReader(cryptoStream);
- //返回解密后的字符串
- return (readerStream.ReadToEnd());
- }
- return (null);
- }
- public static String EncryptTripleDES(String valueString)
- {
- if (valueString != "")
- { //定义TripleDES的Provider
- TripleDESCryptoServiceProvider triprovider =
- new TripleDESCryptoServiceProvider();
- //定义内存流
- MemoryStream memoryStream = new MemoryStream();
- //定义加密流
- CryptoStream cryptoStream = new CryptoStream(memoryStream,
- triprovider.CreateEncryptor(Key192, IV192),
- CryptoStreamMode.Write);
- //定义写IO流
- StreamWriter writerStream = new StreamWriter(cryptoStream);
- //写入加密后的字符流
- writerStream.Write(valueString);
- writerStream.Flush();
- cryptoStream.FlushFinalBlock();
- memoryStream.Flush();
- //返回加密后的字符串
- return (Convert.ToBase64String(memoryStream.GetBuffer(), ,
- (int)memoryStream.Length));
- }
- return (null);
- }
- public static String DecryptTripleDES(String valueString)
- {
- if (valueString != "")
- { //定义TripleDES的Provider
- TripleDESCryptoServiceProvider triprovider =
- new TripleDESCryptoServiceProvider();
- //转换解密的字符串为二进制
- byte[] buffer = Convert.FromBase64String(valueString);
- //定义内存流
- MemoryStream memoryStream = new MemoryStream();
- //定义加密流
- CryptoStream cryptoStream = new CryptoStream(memoryStream,
- triprovider.CreateEncryptor(Key64, IV64),
- CryptoStreamMode.Read);
- //定义读IO流
- StreamReader readerStream = new StreamReader(cryptoStream);
- //返回解密后的字符串
- return (readerStream.ReadToEnd());
- }
- return (null);
- }
- }
- }
再定义一个CookieEncrypt的加密类;代码如下:
- using System;
- using System.Web;
- namespace Test
- {
- public class CookieEncrypt
- {
- public static void SetCookie(HttpCookie cookie)
- { //设置Cookie
- HttpContext.Current.Response.Cookies.Set(cookie);
- }
- public static void SetCookie(String key, String valueString)
- { //设置加密后的Cookie
- key = HttpContext.Current.Server.UrlEncode(key);
- valueString = HttpContext.Current.Server.UrlEncode(valueString);
- HttpCookie cookie = new HttpCookie(key, valueString);
- SetCookie(cookie);
- }
- public static void SetCookie(String key, String valueString,
- DateTime expires)
- { //设置加密后的Cookie,并设置Cookie的有效时间
- key = HttpContext.Current.Server.UrlEncode(key);
- valueString = HttpContext.Current.Server.UrlEncode(valueString);
- HttpCookie cookie = new HttpCookie(key, valueString);
- cookie.Expires = expires;
- SetCookie(cookie);
- }
- public static void SetTripleDESEncryptedCookie(String key,
- String valueString)
- { //设置使用TripleDES加密后的Cookie
- key = EncryptString.EncryptTripleDES(key);
- valueString = EncryptString.EncryptTripleDES(valueString);
- SetCookie(key, valueString);
- }
- public static void SetTripleDESEncryptedCookie(String key,
- String valueString, DateTime expires)
- { //设置使用TripleDES加密后的Cookie,并设置Cookie的有效时间
- key = EncryptString.EncryptTripleDES(key);
- valueString = EncryptString.EncryptTripleDES(valueString);
- SetCookie(key, valueString, expires);
- }
- public static void SetEncryptedCookie(String key, String valueString)
- { //设置使用DES加密后的Cookie
- key = EncryptString.Encrypt(key);
- valueString = EncryptString.Encrypt(valueString);
- SetCookie(key, valueString);
- }
- public static void SetEncryptedCookie(String key,
- String valueString, DateTime expires)
- { //设置使用DES加密后的Cookie,并设置Cookie的有效时间
- key = EncryptString.Encrypt(key);
- valueString = EncryptString.Encrypt(valueString);
- SetCookie(key, valueString, expires);
- }
- public static String GetTripleDESEncryptedCookieValue(String key)
- { //获取使用TripleDES解密后的Cookie
- key = EncryptString.EncryptTripleDES(key);
- String valueString = GetCookieValue(key);
- valueString = EncryptString.DecryptTripleDES(valueString);
- return (valueString);
- }
- public static String GetEncryptedCookieValue(String key)
- { //获取使用DES解密后的Cookie
- key = EncryptString.Encrypt(key);
- String valueString = GetCookieValue(key);
- valueString = EncryptString.Decrypt(valueString);
- return (valueString);
- }
- public static HttpCookie GetCookie(String key)
- { //通过关键字获取Cookie
- key = HttpContext.Current.Server.UrlEncode(key);
- return (HttpContext.Current.Request.Cookies.Get(key));
- }
- public static String GetCookieValue(String key)
- { //通过关键字获取Cookie的value
- String valueString = GetCookie(key).Value;
- valueString = HttpContext.Current.Server.UrlDecode(valueString);
- return (valueString);
- }
- }
- }
接着定义Test.aspx页面;代码如下:
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="Test.Test" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title></title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- 加密前的Cookie值:<asp:Label ID="myCookie" Runat="server"></asp:Label>
- <br />
- 使用DES加密后的Cookie值:<asp:Label ID="EncryptCookie" Runat="server"></asp:Label>
- <br />
- 使用TripleDES加密后的Cookie值:<asp:Label ID="TripleDESCookie" Runat="server"></asp:Label>
- </div>
- </form>
- </body>
- </html>
接着定义Test.aspx.cs代码:
- using System;
- using System.Web;
- namespace Test
- {
- public partial class Test : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- //调用函数EncryptMyCookies()获取Cookie的原始值和加密后的值
- if (!Page.IsPostBack) { EncryptMyCookies(); }
- }
- //获取cookie的值加密前和加密后的值,并获取
- private void EncryptMyCookies()
- {
- var myNameCookie = new HttpCookie("myName", "Elaine");
- Response.Cookies.Add(myNameCookie);
- //获取Cookie的原始值
- var httpCookie = HttpContext.Current.Response.Cookies["myName"];
- if (httpCookie != null)
- myCookie.Text = httpCookie.Value; //获取使用DES加密后Cookie的值
- EncryptCookie.Text = EncryptString.Encrypt(myCookie.Text); //获取使用TripleDES加密后Cookie的值
- TripleDESCookie.Text = EncryptString.EncryptTripleDES(myCookie.Text);
- }
- }
- }
小结:使用Cookie很方便,但是记得加密是重点~~
Cookie学习笔记的更多相关文章
- Cookie学习笔记二:Cookie实例
今天说说刚刚学到的两个Cookie的最经典应用:自己主动登录和购物车设置 一:自己主动登录 须要两个页面:login.jsp与index.jsp,login.jsp用来输出登录信息,index.jsp ...
- 【转载】HTTP Cookie学习笔记
什么是cookie? cookie是什么?是饼干,小甜点? No! No! No! 我今天要总结的cookie并不是你所想的小甜心,我这里要说的cookie是Web开发中的一个重要的"武器& ...
- Session、Cookie 学习笔记
在开始今天的博文之前首先为自己庆祝一下自己有了三个粉丝,也有了同僚的评论,说实话因为这个开心了好久!哈哈,好了在开始今天的正题之前,首先大家需要了解以下几点: a. HTTP 协议是无状态的协议,WE ...
- [原创]java WEB学习笔记30:Cookie Demo 之显示最近浏览的记录
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记29:Cookie Demo 之自动登录
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记28: 会话与状态管理Cookie 机制
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Python3+Selenium3+webdriver学习笔记11(cookie处理)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记11(cookie处理)'''from selenium im ...
- ASP.Net开发基础温故知新学习笔记
申明:本文是学习2014版ASP.Net视频教程的学习笔记,仅供本人复习之用,也没有发布到博客园首页. 一.一般处理程序基础 (1)表单提交注意点: ①GET通过URL,POST通过报文体: ②需在H ...
- python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容
python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...
随机推荐
- Unity3D Mecanim :Body Mask的使用、 角色Retargeting原理分析、Apply RootMotion
一.Body Mask的使用 1.1.配置好骨骼后通过Muscles来微调角色骨骼中的运动范围,以避免角色在动画中的不正确的叠加或失真等现象. 1.2.身体遮罩BodyMask更形象的描述就是身体的开 ...
- idea如何打war包?(部署tomcat后具有class文件)
- intellij idea如何快速格式化代码
选中代码,一键格式化代碼: Ctrl+Alt+L
- Flask详解
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- 从Spring到SpringBoot构建WEB MVC核心配置详解
目录 理解Spring WEB MVC架构的演变 认识Spring WEB MVC 传统时代的Spring WEB MVC 新时代Spring WEB MVC SpringBoot简化WEB MVC开 ...
- java基础/一个类A继承了类B,那么A就叫做B的派生类或子类,B就叫基类或超类。
类重复,pulic class demo1 和class demo1 重复 无主类, 在cmd中输入命令: SET CLASSPATH=. (等号后为英文点符号),即可设置解释的路径为当前路径. 再次 ...
- OpenCV学习笔记之课后习题练习3-4
练习:创建一个大小为100*100的三通道RGB图像.将它的元素全部置0.使用指针算法以(20,5)与(40,20)为顶点绘制一个绿色平面. 参考博文:blog.csdn.net/qq_2077736 ...
- 极大既然估计和高斯分布推导最小二乘、LASSO、Ridge回归
最小二乘法可以从Cost/Loss function角度去想,这是统计(机器)学习里面一个重要概念,一般建立模型就是让loss function最小,而最小二乘法可以认为是 loss function ...
- firmware 固件
COMPPUTER SCIENCE AN OVERVIEW 11th Edition firmware 固件 boot loader 引导程序 device driver 设备驱动程序 Basic I ...
- java---rce
http://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-app ...