[web]深入理解Session和Cookie
一、理解Cookie
由于http是一种无状态的协议,当用户的一次访问结束后,后端的服务器就无法知道下一次来访问的请求是不是上一次的用户了。那么Cookie的作用就是用户通过http访问一个服务器时,这个服务器会将一些Key/Value属性返回给客户端浏览器,并且给这些数据加上一定的限制条件,在符合条件的情况下客户端下一请求再带着这些数据来访问服务器,那么这些数据又被完整的带回来了,此时服务器就可以根据这些数据判断是否是同一个用户访问了。
Cookie的属性项
| 属性项 | 简介 |
| NAME=VALUE | 存放键值对,需要注意的是这设置的NAME不能和其他属性项同名。 |
| Expires | 过期时间,过了设置的时间点后,Cookie就会失效 |
| Domain | 生成Cookie的域名,如"Domain=baidu.com" |
| Path | Cookie生成的路径,如path=/stu-manager |
| Secure | 如果设置了这个属性,那么只有在ssh连接时才能回传Cookie |
Cookie如何工作
Cookie是怎么加到Http的Header中的?当我们在程序使用HttpServletResponse.addCookie()后,在Tomcat容器中会将这个Cookie的信息往上传递,知道org.apache.catalina.connector.Response,调用方法addCookie,再次方法中又调用了 generateCookieString() 方法生成了关于的Cookie的字符串,再调用addHeader方法将Cookie信息写到响应头的,时序图如下:

源代码:
public void addCookie(final Cookie cookie) {
// Ignore any call from an included servlet
if (included || isCommitted()) {
return;
}
// 添加到 cookies列表中
cookies.add(cookie);
// 关于cookie信息的字符串
String header = generateCookieString(cookie);
//if we reached here, no exception, cookie is valid
// the header name is Set-Cookie for both "old" and v.1 ( RFC2109 )
// RFC2965 is not supported by browsers and the Servlet spec
// asks for 2109.
// 添加到响应头
addHeader("Set-Cookie", header, getContext().getCookieProcessor().getCharset());
}
使用Cookie的限制
Cookie是HTTP头中的一个字段,虽然HTTP本身对这个字段没有要求,但是Cookie最终是存放在浏览器中,所以不同浏览器对Cookie的限制虽然不同,但总是有限制的

二、理解Session
Cookie可以让服务端跟踪每个客户端的访问,但是每次客户端的访问都带着Cookie,如果访问量很大的时候,那么就会增加大量网络传输。而Session就是为解决这个问题的。客户端每次访问服务器时,不需要每次都回传一个完成的Cookie,只需要传一个ID。这个ID是客户端第一次访问服务器时随机生成的,唯一的。它包装在一个叫做JSESSIONID的Cookie中回传。(禁用Cookie时使用URL重写的方式回传)
Session如何工作
有了SessionID,我们就可以通过Request创建Session了。

三、Cookie的安全问题
Cookie和Session'都可以跟踪客户端的访问记录,但是他们的工作方式全然不同,Cookie将所有要保存的数据通过服务端传到客户端,客户端再将其保存到浏览器中,所以这些Cookie信息可以被我们看到,甚至可以修改,所以Cookie的安全级别并不高。但是Session的安全性就要高很多了,因为Session将数据存放在服务端,在客户端存储的只是一个SessionID而已。另外Session的大小虽然没有限制,但是它是存放在服务端的,从性能考虑,也不宜存放太多数据。
[web]深入理解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 的初学者还是熟练使用者来说都是一个令人头疼的问题.在初入职场时恐怕很多程序员在面试的时候都被问到过这个问题.其实这个问题回答起来既简单又复 ...
- 理解session和cookie
Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们有各自的优点,也有各自的缺陷,然而具有讽刺意味的是它们的优点和它们的使用场景又是矛盾的.例如,使用 Cookie ...
- 第10章 深入理解Session与Cookie
需要很多Cookie时,考虑HTTP对Cookie数量和大小的限制. 几百或更多台服务器的时候,如何解决Session在多态服务器之间共享的问题. 还有一些安全问题,如Cookie被盗,Cookie伪 ...
- 深入理解Session和Cookie机制
具体来说cookie机制采用的是在客户端保持状态的方案.它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持.cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力. 而 ...
- 深入理解Session与Cookie(一)
Session,Cookie简介: Session和Cookie的作用都是为了保持用户与后端服务器的交互状态,但是各自都有缺陷: Cookie: 随着Cookie的个数的增多和访问量的增加,它占用的网 ...
- web 开发常见问题--Session 与 Cookie 却别
总结: 1.首先,session与cookie都是保存数据的,存在的原因很大程度上是为了解决HTTP协议的无状态特性 2.都是保存数据,却别在于cookie保存在客户端,由浏览器管理,session保 ...
随机推荐
- OSG QT
https://blog.csdn.net/a_Treasure/article/details/82152245 https://www.bbsmax.com/A/kPzOQ4oo5x/ https ...
- Hamming Distance二进制距离
[抄题]: The Hamming distance between two integers is the number of positions at which the correspondin ...
- 303. Range Sum Query 范围求和系列
Immutable [抄题]: Given an integer array nums, find the sum of the elements between indices i and j (i ...
- spring4-3-AOP-面向切面编程
AOP常用的两个用户:日志和验证.也就是程序追踪和数据验证. 直接使用代码实现,距离如下:
- UML建模之类图
UML类间关系的种类 从一个示例开始 请看以下这个类图,类之间的关系是我们需要关注的: 车的类图结构为<<abstract>>,表示车是一个抽象类: 它有两个继承类:小汽车和自 ...
- scala开发环境
1. Intellij IDEA Scala开发环境搭建 Intellij IDEA 15.0.3 默认配置里面没有Scala插件,需要手动安装,在Intellij IDEA 15.0.3 第一次运行 ...
- fgetc()
fgetc() 函数从文件指针中读取一个字符.
- 给初学者的总结:jquery选择器
刚学jquery的时候是又渣又蠢的小白,而且把js和jquery混淆在一起. 把jquery的全部选择器总结在一起,才发现和css选择器好一部分都很像,并且有些选择器还很少用过. 我学习前端的路程是先 ...
- mongodb密码忘了怎么办
自己电脑上mongodb好长时间没上了,密码竟然给忘了,悲剧啊! 修改auth为false,然后重新启动mongodb 这时候可以不用登陆直接进入 db.changeUserPassword('use ...
- WCF和ASP.NET Web API在应用上的选择(转)
出处:http://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html 在最近发布的Visual Studio 2012及.NET 4.5中 ...