http相关知识 - (2)状态管理 - cookie
2017-02-20 21:43
483 查看
http相关知识 - (2)状态管理 - cookie
1.http协议与状态保持
(1)Http协议本身是无状态的,每次的请求都是独立的,执行情况和前面的请求和之后的请求都没有直接关系。(2)网络协议状态:
web应用:有状态
http:无状态
TCP:有状态
IP:无状态
但是我们的有状态的web应用是基于http(无状态)的,这样就造成想要完成有状态的web应用,就需要加上可以记录状态的机制。
2.web应用程序状态管理
a. 表单隐藏字段b. cookie
c. session
d. URL地址重写
3.cookie
(1)cookie机制的基本原理:服务器在响应请求时将一些数据以“键-值”对的形式通过响应信息保存在客户端,当浏览器再次访问相同的应用时,会将原先的Cookie通过请求信息带到服务器端。(2)正统的cookie分发是通过扩展http协议来实现的,服务器在HTTP的响应
4000
头中加上一行特殊的指示以提示浏览器按照指示生成响应的cookie,在客户端也可以生成cookie。
(3)cookie的主要内容:
1. 名称 Name
2. 值 Value
3. 域 Domain 属性的默认值为当前URL的域名部分,不管发出这个cookie的页面在哪个目录下的。
4. 路径 Path : Path属性的默认值是根目录,即 ”/” ,不管发出这个cookie的页面在哪个目录下的。可以由程序设置为一定的路径来进一步限制此cookie的作用范围。
5. 失效日期 Expires : 这个属性设置此Cookie 的过期日期和时间。如果没有设置Cookie 的有效期(默认设置),也可以创建 Cookie,但它不会保存到用户的硬盘上,而是会成为用户会话信息的一部分,关闭浏览器或会话超时这个Cookie即会消失,这种Cookie称作非永久性的 Cookie。存放SessionID的Cookie就是这样的一种Cookie,它不存放在硬盘上,只存在内存之中.
6. 安全标志 Secure : 当secure属性设置为true时,cookie只有在https协议下才能上传到服务器,而在http协议下是没法上传的,所以也不会被窃听.
7. HttpOnly 仅服务器端 : 通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击.
(4)cookie 类型
1. 普通cookie: 服务端和js都可以创建,都可以访问。
2. HttpOnly cookie: 只能由服务端创建,JS无法读取。
3. 安全的cookie(https): 服务端和JS都可以创建,JS仅在HTTPS下访问。
(5) cookie的操作
前端:
1. JS操作cookie:
//写cookies function setCookie(name,value) { var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Days*24*60*60*1000); document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString(); } //读取cookies function getCookie(name) { var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); if(arr=document.cookie.match(reg)) return unescape(arr[2]); else return null; } //删除cookies function delCookie(name) { var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval=getCookie(name); if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString(); }
2. Jquery操作cookie:
//创建cookie $.cookie('the_cookie', 'the_value', { expires: 7 }); //读取cookie: $.cookie('the_cookie'); //删除cookie $.cookie('the_cookie', null);
服务端(C#)
/// <summary> /// Set cookie. /// </summary> private void SetCookie() { Response.Cookies["username"].Value = "Rod"; Response.Cookies["username"].Expires = DateTime.Now.AddDays(1); } /// <summary> /// Get cookie. /// </summary> private string GetCookie() { if (Request.Cookies["username"] != null) { return Request.Cookies["username"].Value; } return null; } /// <summary> /// Delete cookie. /// </summary> private void DelCookie() { HttpCookie cookie = Request.Cookies["username"]; if (cookie != null) { cookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Set(cookie); } }
(6) cookie案例
a. js添加cookie
var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000); document.cookie = "Companay=" + escape("Argument") + ";Domain" + "= localhost" + ";Path" + "= /Http" + ";expires=" + exp.toGMTString() +";";
然后在chorme查看cookie的值,可以查看到在localhost:30403/Http拥有一个名为Company的cookie,但是这个cookie只是属于/Http.
为了验证上面的问题:我们退回到根目录下: localhost:30403,此时这个页面下是没有cookie的。
b. fillder截取http查看cookie: 从下图中可以看到发送到server端的cookie只有key,value。
c. server查看cookie: 在server端只有key和value,因为对于cookie,在server端,有cookie就有cookie,如果js端已经过期的cookie就不会存在,更不会发送到server端,path的值始终是“/”。
d. server添加两个新的cookie:希望大家着重看一下四个属性值,他们的值不同。
HttpCookie cookie1 = new HttpCookie("Name", "rod chen"); cookie1.Expires = DateTime.Now.AddDays(1); cookie1.Path = "/"; cookie1.HttpOnly = true; cookie.Secure = true; HttpCookie cookie2 = new HttpCookie("Name1", "rod chen1"); cookie2.Expires = DateTime.Now.AddDays(2); cookie2.Path = "/Http"; cookie2.HttpOnly = false; cookie2.Secure = false; Response.Cookies.Add(cookie1); Response.Cookies.Add(cookie2);
e. fillder截取response:从response中可以看到我们新加的cookie,以Set-cookie的http扩展形式返回到客户端。注意我们在server加的属性serure在这个地方没有返回,因为我们的应用程序是基于http协议的,而不是https协议的。
d. 接下来在客户端看一下我们新加的cookie,刷新一下页面可以看到我们新加的两个cookie,以及我们自己设置的属性。此时我们打开控制台看一下前端能够拿到的cookie。
可以看到在前端我们只可以看到两个cookie,因为我们新加的key为Name的cookie是设置httponly,就是在server端我们才可以看到,这个我们会在后面去看到,这里给大家留一个问题好了,如果我调回根目录页面,我们还可以看到几个cookie,console台还可以拿到几个cookie。
e. 我们在发一个请求去看一下现在发送到server的cookie有几个。三个,客户端可以操作的两个cookie加上一个在server才可以操作的cookie。
Note: 对于cookie的总结会在后面和session一起说明一下!有不正之处欢迎批评指正!
相关文章推荐
- 详解HTTP Cookie状态管理机制
- HTTP状态管理机制之Cookie
- HTTP状态管理机制之Cookie(转)
- HTTP协议的状态管理相关知识点
- Java爬虫(三)-- httpClient 模拟登录 + cookie 登录状态管理
- 详解HTTP Cookie状态管理机制
- HTTP状态管理机制之Cookie
- 对java的 cookie处理进行修正(附http的相关知识)
- 详解HTTP Cookie状态管理机制
- 查看端口状态相关知识汇总
- 状态管理之Cookie
- ASP.NET状态管理之五(Cookie)
- 状态管理之Cookie
- ASP.net 获得客户端的IP相关知识 --http://blog.joycode.com/ghj/archive/2008/02/20/114827.joy
- Idhttp ,cookie相关
- ASP.NET状态管理 APPlication,Session,Cookie和ViewStat用法
- ASP.NET状态管理之四(暂存状态HttpContext.Items)
- 塑胶行业应用点――水口料的基本知识及相关管理
- linux用户管理相关知识
- asp.Net Cookie相关知识