深入理解Session与Cookie(一)
Session,Cookie简介:
Session和Cookie的作用都是为了保持用户与后端服务器的交互状态,但是各自都有缺陷:
Cookie:
随着Cookie的个数的增多和访问量的增加,它占用的网络带宽很大,假设一个Cookie占用100字节,如果一天的PV有几亿,那么它得占多少带宽?
Session:
Session的致命弱点在于不容易在多台服务器之间共享,这也限制了Session的使用。
理解Cookie:
当一个用户通过HTTP访问一个服务器时,这个服务器将一些Key/Value的键值对返回客户端浏览器,当这个用户再次访问服务器时,数据又被完整的带回服务器。
当前Cookie有两个版本:Version0和1,响应头设置的标识也不同:Set-Cookie,Set-Cookie2,属性也有些不同(Servlet3.0规范支持Version1)。
Cookie如何工作:
@RequestMapping(value = "/testCookie")
public Object testCookie(HttpServletRequest request, HttpServletResponse response) {
Cookie[] cookies = request.getCookies();
String userName = getCookie(cookies, "userName");
String userAge = getCookie(cookies, "userAge");
if (userName == null) {
response.addCookie(new Cookie("userName", "zhangsan"));
}
if (userAge == null) {
response.addCookie(new Cookie("userAge", "18"));
}
return response.getHeaders("Set-Cookie");
} private String getCookie(Cookie[] cookies, String key) {
if (cookies != null) {
for (Cookie cookie : cookies) {
if (key.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
访问后,得到如下输出,说明每次创建Cookie时都会创建一个Header。

具体是怎么实现的,根据源码得知,真正构建Cookie是在Tomcat的catalina.jar中的Response类中完成的,该类实现了HttpServletResponse接口。

generateCookieString中由CookieProcessor.generateHeader()方法来进行Cookie到String的转换。

接着执行addHeader方法,addHeader()里调用了MimeHeaders.addValue(name)方法,由MessageBytes.setString(value)设置值,待到真正响应时由Http11Processor.prepareResponse()方法来进行预处理,按顺序的写入字节流中返回。


好了,整个Cookie的创建到响应的过程就到此结束了,有兴趣的朋友们可以自行研究一波源码。
Cookie的限制:
Cookie是HTTP头中的一个字段,虽然Http本身对这个字段没有多少限制,但是Cookie最终是存在浏览器中的,所以不同的浏览器对Cookie的存储都有一些限制。
| 浏览器版本 | Cookie的数量限制(每个域名) | Cookie的总大小限制 |
| IE6 | 20 | 4095字节 |
| IE7 | 50 | 4095字节 |
| IE8 | 50 | 4095字节 |
| IE9 | 50 | 4095字节 |
| Chrome | 50 | 大于80000 |
| FireFox | 50 | 4097个字节 |
所以说,当如果想在IE上使用Cookie来存储很长一段信息的时候就得注意了,超出长度的部分会被截断,当然一般只有初创公司会这么干^_^(我就被坑过一次)。
还有一些Cookie的知识没说完,下节再说。
深入理解Session与Cookie(一)的更多相关文章
- 理解Session与Cookie
写在前面的话:Session和Cookie是非常有意思的两个概念,对于两者的管理可以处理的很复杂,但是无论如何,理解Session和Cookie的基本概念和发明初衷,对于问题的解决,大有裨益. === ...
- 转!!深入理解 Session 与 Cookie
摘要 Session 与 Cookie 不管是对 Java Web 的初学者还是熟练使用者来说都是一个令人头疼的问题.在初入职场时恐怕很多程序员在面试的时候都被问到过这个问题.其实这个问题回答起来既简 ...
- 深入理解 Session 与 Cookie
Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们有各自的优点,也有各自的缺陷,然而具有讽刺意味的是它们的优点和它们的使用场景又是矛盾的.例如,使用 Cookie ...
- 【转】深入理解 Session 与 Cookie
Session 与 Cookie 不管是对 Java Web 的初学者还是熟练使用者来说都是一个令人头疼的问题.在初入职场时恐怕很多程序员在面试的时候都被问到过这个问题.其实这个问题回答起来既简单又复 ...
- [web]深入理解Session和Cookie
一.理解Cookie 由于http是一种无状态的协议,当用户的一次访问结束后,后端的服务器就无法知道下一次来访问的请求是不是上一次的用户了.那么Cookie的作用就是用户通过http访问一个服务器时, ...
- 理解session和cookie
Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们有各自的优点,也有各自的缺陷,然而具有讽刺意味的是它们的优点和它们的使用场景又是矛盾的.例如,使用 Cookie ...
- 第10章 深入理解Session与Cookie
需要很多Cookie时,考虑HTTP对Cookie数量和大小的限制. 几百或更多台服务器的时候,如何解决Session在多态服务器之间共享的问题. 还有一些安全问题,如Cookie被盗,Cookie伪 ...
- 深入理解Session和Cookie机制
具体来说cookie机制采用的是在客户端保持状态的方案.它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持.cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力. 而 ...
- 第十章 深入理解Session与Cookie
理解Cookie 理解Session Cookie安全问题 分布式Session框架 Cookie压缩 表单重复提交问题 多终端Session统一
随机推荐
- Web渗透测试笔记(基础部分)
信息收集: dns信息收集 格式:dns... -参数 域名 -参数 示例: root@xxSec:~# dnsenum baidu.com root@xxSec:~# dnsenum -f dns. ...
- 约瑟夫环-循环队列算法(曾微软,google笔试题)
这也是我们聚会时常常做的游戏之一. 算法思路: 此处我使用循环链表模拟人围城一圈,每一个结点代表一个人.链表是一个有序链表,链表结点数据域是一个整型,代表人的序号.出局等同于链表删除元素,每次出局后重 ...
- 吐槽版︱MRO-Microsoft R Open快捷键+界面识别+功能设置
下载了之后,发现连运行(RUN键)在哪都不知道,蒙逼的在哪倒弄半天,都执行不了...问了别人,都说"ctrl+enter",但是我的电脑执行不了,于是今天就狠狠的一个一个按钮的点一 ...
- Java中的a++和++a的区别
1.a++和++a的区别 a++表示先将a放在表达式中运算,然后再加1: ++a表示先将a加1,然后再放在表达式中运算 2.实例 (1)Java代码 /** * @Title:JiaJia.java ...
- Android开发中用到的第三方框架汇总
最近上网搜索了一些框架资料,整理了以下常用框架,希望在项目中有所帮助. 1.网络请求框架 android-async-http 该网络框架的介绍文章地址:http://www.cnblogs.com/ ...
- Linux显示所有输出域自动缩小到最短三数字单元和显示单元的打印
Linux显示所有输出域自动缩小到最短三数字单元和显示单元的打印 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ free -h total used free ...
- 浅谈IT企业挑选技术人员招聘几个要点
在实际人员招聘的一些感想总结,企业需要怎么样的人才,个人总结如下: 1.技术能力不是第一位 企业在招聘一个人的时候往往看你第一点不是技术实力,而是你个人言谈行为和态度,往往一个面试你的人员他不可能在半 ...
- The Eclipse executable launcher was unable to locate its companion launcher jar的解决方法
大家都知道eclipse是免安装的,基本上解压就能用,但是笔者在解压后打开eclipse时遇到一个奇葩的问题,如题目所示. 在网上搜了半天,基本上都说的是:The Eclipse executable ...
- 洛谷U19464 山村游历(Wander)(LCT,Splay)
洛谷题目传送门 LCT维护子树信息常见套路详见我的总结 闲话 题目摘自WC模拟试题(by Philipsweng),原题目名Wander,"山村游历"是自己搞出来的中文名. 数据自 ...
- 【BZOJ4736】温暖会指引我们前行(Link-Cut Tree)
[BZOJ4736]温暖会指引我们前行(Link-Cut Tree) ##题面 神TM题面是UOJ的 题解 LCT傻逼维护最大生成树 不会的可以去做一做魔法森林 #include<iostrea ...