会话跟踪技术用户跟踪用户整个会话,主要技术有Session与Cookie技术(Cookie通过在客户端记录信息确定用户身份,Session通过在服务端记录信息确定用户身份)
一、Cookie机制与原理
会话跟踪:一个用户所有的请求都应该在同一个会话中,另一个用户的所有请求操作则应该属于另一个会话。
Web应用程序采用的是Http协议来进行数据传输的。Http协议是无状态协议,一旦数据交互完毕,前后台连接就会关闭,再次交换数据需要建立新的连接,所以服务器无法从连接上跟踪会话。
Cookie就是会话跟踪机制,可以弥补Http协议无状态的不足。
Cookie通俗的讲就是:访问某些网站后再本地存储的一些网站相关的信息,下一次访问时减少一些步骤。
确切讲:Cookie是服务器再本地机器上存储的一小段文本并随每一个请求发送至同一个服务器,保存在客户端。
二、Session机制与原理
除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。
Session是另外一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。简 单的说,当你登录一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上面,客户端每次请求服务器的时候会发送 当前会话的sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登录,或具有某种权限。由于数据是存储在服务器 上面,所以你不能伪造,但是如果你能够获取某个登录用户的sessionid,用特殊的浏览器伪造该用户的请求也是能够成功的。sessionid是服务 器和客户端链接时候随机分配的,一般来说是不会有重复,但如果有大量的并发请求,也不是没有重复的可能性
客户端浏览器访问服务器的时候,服务端把客户端信息以某种形式记录在服务端,这就是Session,客户端再次访问时只需要从该Session中查找该客户的状态就可以了。
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。
三、Session的生命周期
Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
创建:第一次访问服务器
销毁:服务器关闭、Session失效/过期、手动Session.invlidate()
四、Session与Cookie的区别
1)存储位置不同:Cookie存在客户端;Session存在服务端
2)存取方式不同:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象
3)安全型(隐私策略)不同:Cookie存储在浏览器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。 假如选用Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只要本人能读得懂。而假如选择Session就省事多了,反正是放在服务器上,Session里任何隐私都能够有效的保护。
参考: https://blog.youkuaiyun.com/fangaoxin/article/details/6952954