Cookie

Cookie诞生

由于HTTP协议是无状态的,而服务器端的业务需要有状态的。Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用。 Cookie在远程浏览器端存储数据并以此跟踪和识别用户的机制。

Cookie处理过程

1、服务器向客户端发送cookie

2、浏览器将cookie保存

3、之后每次http请求浏览器都会将cookie发送给服务器端

Cookie服务器端的发送

•服务器端像客户端发送Cookie是通过HTTP响应报文实现的,在Set-Cookie中设置需要像客户端发送的cookie,cookie格式如下: •Set-Cookie: "name=value;domain=.domain.com;path=/;expires=Sat, 11 Jun 2016 11:29:42 GMT;HttpOnly;secure” •其中name=value是必选项,其它都是可选项。 • •需要注意的是,如果给cookie设置一个过去的时间,浏览器会立即删除该cookie;

name:一个唯一确定的cookie名称。通常来讲cookie的名称是不区分大小写的。

value:存储在cookie中的字符串值。最好为cookie的name和value进行url编码

domain:属性定义可访问该cookie的域名,对一些大的网站,如果希望cookie可以在子网站中共享,可以使用该属性。例如设置Domain为.bigsite.com,则sub1.bigsite.com和sub2.bigsite.com都可以访问已保存在客户端的cookie,这时还需要将Path设置为/

Path :属性定义网站上可以访问cookie的页面的路径,缺省状态下Path为产生cookie时的路径,此时cookie可以被该路径以及其子路径下的页面访问;可以将Path设置为/,使cookie可以被网站下所有页面访问。

Max-Age :属性定义cookie的有效时间,用秒计数,当超过有效期后,cookie的信息不会从客户端附加在HTTP消息头中发送到服务端。

HttpOnly:告知浏览器不允许通过JS脚本document.cookie去更改这个值,同样这个值在document.cookie中也不可见。但在http请求张仍然会携带这个cookie。注意这个值虽然在脚本中不可获取,但仍然在浏览器安装目录中以文件形式存在。这项设置通常在服务器端设置。

Secure 属性值定义cookie的安全性,当该值为true时必须是HTTPS状态下cookie才从客户端附加在HTTP消息中发送到服务端,在HTTP时cookie是不发送的;Secure为false时则可在HTTP状态下传递cookie,Secure缺省为false。

Cookie服务器端的解析

•Cookie[] cookies = request.getCookies(); •for(inti= 0; i< cookies.length; i++) { •Cookie cook = cookies[i]; •if(cook.getName().equalsIgnoreCase("name")) { •response.getWriter().append("cookie value:").append(cookie.getValue()); •}else{ •response.getWriter().append("NO cookie "); •}

}

Cookie使用事项

•Cookie通常用来存储一些不是很敏感的信息,或者进行登录控制。每个域名下允许的Cookie是有限制的,根据浏览器这个限制也不同。Cookie不是越多越好,它会增加宽带,增加流量消耗,所以不要滥用Cookie;不要把Cookie当作客户端的存储器来用。一个域名的每个Cookie限制以4千字节(KB)键值对的形式存储。

Cookie跨域

•跨二级域名 •我们知道cookie可以跨二级域名来访问,这个很好理解,例如你在www.a.com所在的web应用程序创建了一个cookie,在cs.a.com这样的二级域名对应的应用程序中可以访问,当然你在创建cookie的时候需要指出Domain属性为a.com。 •跨域名问题 •现在问题就是如果我不是二级域名而是完全在不同的域中,例如现在是www.b.com想要访问www.a.com或其二级域名对应的程序中创建的cookie怎么办呢?我们知道至少靠常规反的方法是访问不了的,关键我们就是看看有没有方法可以访问。事实是Cookie可以在一定条件下跨域,而不是随心所欲的实现跨域。 •方案一: Response.AddHeader("P3P", "CP=CAO PSA OUR");

方案二: ajaxjsonp请求 Cookie与Session

都是记录服务端状态的技术。Cookie信息保存在客户端本地,Session保存在服务端,并生成一个唯一的ID标识放到Cookie里

转载于:https://my.oschina.net/tanghaoo/blog/2997402

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值