Cookie 和Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。
Cookie一般用来保存用户信息。Cookie是服务器在客户端保存的信息。
Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
Session主要作用是通过服务端记录用户的状态。
Sesion是服务器端技术,服务器在运行时为每一个用户的浏览器创建创建一个其独享的session对象,由于session为各个用户浏览器独享,所以用户在访问服务器的不同页面时,可以从各自的session中读取/添加数据,从而完成相应任务。
Cookie的工作原理:
1.浏览器端第一次发送请求到服务器端
2.服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
3.浏览器端再次访问服务器端时会携带服务器端创建的Cookie
4.服务器端通过Cookie中携带的数据区分不同的用户
Session的工作原理:
1.Session是基于Cookie实现的。浏览器端第一次发送请求到服务器端,服务器端创建一个Session,为了保证在一个会话的多次请求之间Session是同一个,同时会创建一个特殊的Cookie,其name为JSESSIONID的固定值,value为session对象的ID,然后再将该Cookie发送至浏览器端。
2.浏览器端发送第二次及以上的请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
3.服务器端根据name为JSESSIONID的Cookie的value,去查询Session对象,从而区分不同用户。
总结:Cookie是客户端浏览器用来保存服务端数据的一种机制,当我们通过浏览器去进行网页访问 的时候,服务器可以把某一些状态数据以Key-Value的形式写入到Cookie里存储到客户端浏览器,然后客户端下次再访问服务器的时候,我们可以携带这一些状态数据发送到服务器端,服务器端可以根据Cookie里面携带的内容去识别使用者。
Session表示一个会话,它是属于服务器端的一个容器对象,默认情况下针对每一个浏览器的请求,Servlet都会分配一个Session对象,Session在本质上,我们可以认为它是一个ConcurrentHashMap,它可以用来存储当前会话产生的一些状态数据,我们都知道,Http协议本身是一个无状态协议,也就是说服务器端并不知道客户端发送过来的多次请求是属于同一个用户的,所以Session是用来弥补Http无状态的一个不足。简单来说,服务器端可以利用Session来存储客户端在同一个会话里面产生的多次请求的一个记录,那么基于服务器端的Session的存储机制,再结合客户端的Cookie机制,我们就可以实现一个有状态的Http协议。它的工作原理非常简单,首先,客户端第一次访问服务器端的时候,服务器端会针对这次请求创建一个会话,并且生成一个唯一的SessionId来标注这个会话,然后服务器端把这个SessionId写入到客户端浏览器的Cookie里面,用来去实现客户端状态的一个保存,那么在后续的请求里面,每一次都会携带SessionId,服务器端就可以根据SessionId来识别当前这个会话的状态。总的来看,Cookie是客户端的存储机制,Session是服务器端的存储机制。
关关难过关关过,