session 和cookie的区别和联系
session
1.什么是session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了session是一种特殊的cookie。cookie是保存在客户端的,而session是保存在服务端。
2.为什么要用session
由于cookie 是存在用户端,而且它本身存储的尺寸大小也有限,最关键是用户可以是可见的,并可以随意的修改,很不安全。那如何又要安全,又可以方便的全局读取信息呢?于是,这个时候,一种新的存储会话机制:session 诞生了
3.session原理
当客户端第一次请求服务器的时候,服务器生成一份session保存在服务端,将该数据(session)的id以cookie的形式传递给客户端;以后的每次请求,浏览器都会自动的携带cookie来访问服务器(session数据id)。
Cookie:
它是客户端浏览器用来保存服务端数据的一种机制。当通过浏览器进行网页访问的时候,服务器可以把某一些状态数据以 key-value 的方式写入到 Cookie 里面存储到客户端浏览器。然后客户端下一次再访问服务器的时候,就可以携带这些状态数据发送到服务器端,服务端可以根据 Cookie 里面携带的内容来识别使用者。
Session:
表示一个会话,它是属于服务器端的容器对象,默认情况下,针对每一个浏览器的请求。Servlet 容器都会分配一个 Session。Session 本质上是一个 ConcurrentHashMap,可以存储当前会话产生的一些状态数据。
Http 协议本身是一个无状态协议,也就是服务器并不知道客户端发送过来的多次请求是属于同一个用户。所以 Session 是用来弥补 Http 无状态的不足,简单来说,服务器端可以利用 session来存储客户端在同一个会话里面的多次请求记录。基于服务端的 session 存储机制,再结合客户端的 Cookie 机制,就可以实现有状态的Http 协议。
(如图)具体的工作原理是:
客户端第一次访问服务端的时候,服务端会针对这次请求创建一个会话,并生成一个唯一的 sessionId 来标注这个会话。然后服务端把这个 sessionid 写入到客户端浏览器的 cookie 里面,用来实现客户端状态的保存。在后续的请求里面,每次都会携带 sessionid,服务器端就可以根据这个 sessionid 来识别当前的会话状态。
反射
什么是反射(Reflection )
主要是指程序可以访问、检测和修改它本身状态或行为的一种能力
Java 反射的优点:
增加程序的灵活性,可以在运行的过程中动态对类进行修改和操作提高代码的复用率,比如动态代理,就是用到了反射来实现可以在运行时轻松获取任意一个类的方法、属性,并且还能通过反射进行动态调用
Java 反射的缺点:
反射会涉及到动态类型的解析,所以 JVM 无法对这些代码进行优化,导致性能要比非反射调用更低。使用反射以后,代码的可读性会下降反射可以绕过一些限制访问的属性或者方法,可能会导致破坏了代码本身的抽象性