欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【第10章】深入理解Session与Cookie

程序员文章站 2024-03-20 18:37:40
...
1.理解Cookie

1.1.作用:当一个用户通过HTTP访问服务器的时候,服务器会将一些key/value键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在符合条件时这个用户再次访问这个服务器时,数据又被完整地带回给服务器

1.2.根据Cookie的值来划分是哪个用户,用于用户信息的缓存

1.3.Cookie的信息设置在响应头

1.4.Servlet规范并不支持Version1的Cookie,但是Version1的Cookie属性可以用在Version0的属性中

1.5.构建Cookie是在org.apache.catalina.connector.Response类中完成的

1.6.在构建HTTP返回字节流时是将Header中所有的项顺序地写出,而没有进行任何修改

2.理解Session

2.1.作用:解决了客户端与服务端之间传输量过大,而不能用Cookie的问题

2.2.Session的标识是一个NAME为JSESIONID的Cookie

2.3.Manager类管理所有Session的生命周期

2.4.StandardManager类是Manager类的实现类

2.4.1.负责Servlet容器中所有的StandardSession对象的生命周期管理

2.4.2.当Servlet容器重启或关闭时,StandardManager负责持久化没有过期的StandardSession对象,将这些对象放到名为"SESSIONS.ser"文件中

2.4.3.当Servlet容器重启时,StandardManager类会重新读取名为"SESSIONS.ser"文件,解析出所有的Session对象,然后重新保存在StandardManager的session集合中

2.4.4.当Servlet容器关闭时,StandardManager类会调用unload方法,将sessions集合中没有过期的StandardSession对象写入到"SESSIONS.ser"文件中

2.4.5.持久化保存Servlet容器中的Session对象,必须调用Servlet的stop和start命令,而不能直接结束(kill)Servlet容器的进程

3.Cookie安全问题

3.1.Cookie所有要保存的数据通过HTTP的头部从客户端到服务器,然后又从服务器到客户端,所有的数据保存在客户端的浏览器里,这些数据可以被访问到

3.2.Session的数据是保存在服务端的,只是通过Cookie传递一个SessionID而已,适合存储用户隐私和重要数据

4.分布式Session框架

4.1.解决的问题

4.1.1.Session配置的统一管理

4.1.2.Cookie使用的监控和统一规范管理

4.1.3.Session存储的多元化

4.1.4.Session配置的动态修改

4.1.5.Session加密key的定期修改

4.1.6.充分的容灾机制(数据备份储存的最高层次),保持框架的稳定性

4.1.7.Session各种监控和报警支持

4.1.8.Session框架的可扩展性,兼容更多的Session机制如wapSession

4.1.9.跨域名Session与Cookie如何共享问题

4.1.9.1.session不可以跨域,Cookie可以跨域

4.2.订阅服务器(RSS)可以先将需要的Session和Cookie项订阅,限制这个应用能够使用哪些Session和Cookie项,也可以控制读写.将某应用与固定的Session和Cookie绑定

4.3.统一通过订阅服务器推送配置可以有效地集中管理资源

4.4.共享Session必须存储在一个分布式缓存中

4.5.订阅服务器的开源配置服务器:Zookeeper集群管理服务器,可以统一管理所有服务器的配置文件

4.6.比较重要的Session可以存储到Cookie中

4.7.实现两个域名下Session同步

4.7.1.从一个域名下取得sessionID,然后将这个sessionID同步到另外一个域名下,sessionID就是Cookie

4.7.2.将同一个sessionID作为Cookie写到两个域名下

4.8.设置Session签名可以防止Cookie被盗取:根据用户的私密信息生成一个签名,表示唯一,然后把签名当做Cookie在浏览器进程中和服务器传递.用户每次访问服务器就会检查签名和服务器端session重新生成的签名是否一致

5.Cookie压缩

5.1.压缩方式是将多个key/value对看成普通文本,做文本压缩

6.表单重复提交问题

6.1.防止表单重复提交,需要标识用户的每一次访问请求,可以在用户请求一个表单域时增加一个隐藏表单项,值唯一.

6.2.用户请求时生成唯一的token,并保存在Session中,当用户再次请求的时候,检查这个token和Session中保存的token是否一致,一致则没有重复提交

6.3.token值是根据一个种子作为key生成一个随机数

Remark:

1.Session和Cookie是HTTP的一个配置项,在Servlet中对应一个类

2.Session和Cookie的作用都是为了保持访问者与后端服务器的交互状态

3.Session适合大访问量,但不容易在多台服务器之间共享

Cookie与Session的区别详解:http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html

转载于:https://my.oschina.net/Tsher2015/blog/743139