[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保 ...
随机推荐
- [转]NDK编译库运行时报dlopen failed: cannot locate symbol "__exidx_end" 解决办法
原文链接:http://blog.csdn.net/acm2008/article/details/41040015 当用NDK编译的库在运行加载时报如下错: dlopen("/data/d ...
- ubuntu18桌面卡死解决方法
1 直接 alt+f2 会弹出个输入框 里边输入 小写 r 回车 这样会重启你的gnome-shell 桌面环境 2 ctrl+f3 进入终端 黑白屏环境 top 一下 你会发现 gnome-shel ...
- Thread.sleep原理
我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 假设现在是 2008-4-7 12:00:00.000,如果我调用 ...
- loadrunner12-添加集合点
1.首先添加集合点之前要插入事务,集合点和事务通常是一起使用的,单独使用集合点,基本上可以说是没有意义的. 2.在开始事务之前 ,插入一个“集合点”,那么在多用户执行时,就可以将用户请求停下来,直到用 ...
- es-多文档简单查询(_mget)
1.多文档查询 (1)url:POST http://localhost:9200/_mget?pretty/ 参数: { "docs": [{ "_index" ...
- C# Winform 跨线程更新UI控件常用方法总结(转)
出处:http://www.tuicool.com/articles/FNzURb 概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件 ...
- javascript总结24:Array常用的队列操作和排序方法
1 数组-引用类型 JavaScript中的内置对象 复习数组的使用 两种创建数组的方式 Array对象的属性 length 获取数组的长度(元素个数) 2 常用方法 : 检测数组 instanceo ...
- 一句话说说java设计模式
设计模式 看到标题,大家是不是觉得不可思议,java的23种设计模式那么‘复杂’,那么‘难懂’,用一句话怎么说的明白呢? 首先,各位看官不要误解,近来在回头看设计模式,之前都看过,但时间是把‘杀猪刀’ ...
- mysql - 查看表字段和字段描述
1.mysql查看表字段和字段描述 SELECT column_name, column_comment FROM information_schema.columns WHERE table_sch ...
- 团体程序设计天梯赛L1-024 后天 2017-03-22 17:59 68人阅读 评论(0) 收藏
L1-024. 后天 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 如果今天是星期三,后天就是星期五:如果今天是星期六,后天就 ...