【第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
推荐阅读
-
Django中的cookie与session详解和理解
-
深入理解cookie和session,这一篇就够了(建议收藏)
-
深入理解Session与Cookie
-
【第10章】深入理解Session与Cookie
-
《深入理解Java虚拟机》笔记之第3章 垃圾收集器与内存分配策略 博客分类: 读书笔记 垃圾收集JVM
-
深入探究Django中的Session与Cookie
-
深入探究Django中的Session与Cookie
-
php关于对cookie与session的理解_PHP教程
-
《PHP核心技术与最佳实践》-Cookie-Session深入
-
《PHP核心技术与最佳实践》-Cookie-Session深入