1、什么是一次会话?
用户打开web站点之后,在web站点当中进行相关的操作,到浏览器关闭,这个过程我们可以称为一次会话。
每一次会话服务器端都会为当前的会话维护一个对象,该对象的名字叫做:session,翻译为:会话
2、session这种机制不属于java语言,属于B/S架构中的标准,也是HTTP协议的一部分。其它的编程语言实现的web系统开发也有session对象。
3、在Servlet规范当中session对应的类名是:javax.servlet.http.HttpSession(简称session)
4、session对象在服务器端“session列表”当中。没有在浏览器客户端上(Cookie最终保存在浏览器客户端上)
5、session对象在服务器端被维护,session对象可以保存会话的状态,但是这个会话的状态是保存在服务器端的。
cookie只能将会话状态保存在浏览器客户端,只要换一个浏览器,状态就丢失了,但是对于session来说,由于session对象在服务器端,所以session对象可以将会话状态保存在服务器端。
6、request对象和session对象的关系?
用户在浏览器上发送一个url,就是一次请求,一次请求对应一个request对象。
再发送一次请求会对应一个新的request对象。request对象就是代表一次请求,生命周期较短。
以上的用户在浏览器上发送了两次请求(没有关闭浏览器),或者更多次请求,底层访问的session对象是同一个,session对象就代表一次会话,一次会话包括多次请求。
7、在浏览器还处于打开的状态下,用户只要发送一次请求,就会获取到自己的session对象,这个是怎么实现的?
session的实现原理是什么?
当用户第一次打开浏览器,发送请求给服务器的时候,浏览器缓存当中没有Cookie数据,当然也不会发送cookie给服务器,服务器创建新的session对象和对应的Cookie数据,将Cookie数据和session对象绑定到session列表当中,然后服务器将cookie数据发送给浏览器客户端,浏览器客户端将其保存到缓存当中。
只要浏览器不关闭,第2+次发送请求的时候,浏览器会自动发送缓存当中的cookie给服务器,服务器收到cookie之后,通过cookie在session列表当中找到对应的session对象。
注意:和session对象相关的cookie有一个特点:jsessionid=xxxxxxx和session对象关联的cookie的name一定是:jsessionid,这个是不可变的,也可以说是一种规范。