分享人:童志荣
1.背景介绍
2.知识剖析
3.常见问题
4.编码实战
5.扩展思考
6.参考文献
7.更多讨论
Http协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录; Session的主要目的就是为了弥补Http的无状态特性。简单的说,就是服务器可以利用session存储客户端在同一个会话期间的一些操作记录;
对Tomcat而言,Session是一块在服务器开辟的内存空间,其存储结构为ConcurrentHashMap;
1、服务器如何判断客户端发送过来的请求是属于同一个会话?
答:用Session id区分,Session id相同的即认为是同一个会话,在Tomcat中Session id用JSESSIONID表示;
2、服务器、客户端如何获取Session id?Session id在其之间是如何传输的呢?
Session id是服务端生成的,但是通过cookie存储在客户端上; 客户端第一次请求的时候,服务端通过Set-Cookie要求客户端设置sessionId的cookie信息,然后每次客户端都带着这个session ID去请求服务端,服务端就是这么辨别的。
session劫持 只要用户知道JSESSIONID,该用户就可以获取到JSESSIONID对应的session内容.
让使用者不需要自己去创建或获取自己的依赖,既然创建或获取的过程不是使用者控制的。
这也就意味着,当我需要切换依赖时,不需要改变使用者的代码。这当然要结合面向接口编程等思想,也许有人要说我一个接口就只有一个实现,何必用接口,我也基本不会去切换自己的实现。
说的对,然而就算你只有一个实现。 但是你往往会用到AOP吧,其实用代理对象替换原对象也算是切换了实现。什么日志,权限检查,异常处理等等需求。