会话是大家开发Java EE Web应用的常用技术,那么会话是什么,会话的用途还有工作原理又是什么,下面就简单说一说。
什么是会话,在web应用中,作为客户端的浏览器,通过请求/响应这种模式访问同一个web网站的各种web页面,从开始访问这个服务器直到结束整个过程称为一次会话。那么就有一个问题,同时访问这个服务器的客户端有很多,怎么能保证服务器对每个客户端返回相应的响应呢?最简单的办法就是通过持续链接服务保证一一对应的服务,但是web服务器为了提高同时服务很多用户的性能,在客户端和服务器端的请求响应中使用无状态协议HTTP,导致它连鱼的记忆都没有,一但完成一次响应就会把和哪个客户端通信过,及通信的内容忘得一干二净,这样客户端再发来请求的时候服务器就完全没印象了把它当做新的客户端来应对,这显然是不合适的。这就好像你和一个人刚刚各自介绍过对方而且相谈甚欢,转脸再见他就一脸茫然的跟你说“初次见面请多关照”。
解决上面的问题就需要在客户端第一次请求web服务器的时候,web服务器生成一种称为“会话标识符”的ID,然后伴随响应发送给客户端,之后的通信中客户端发来的请求只需要带着这个特定的ID,服务器就可以知道这是哪个客户端了。这就像你救了一个人,他为了日后报答你给你留了个信物,以后你来找他带着信物他就知道你是谁了,这个“信物”就是会话ID。
下图中为http响应头,其中的JSESSIONID是由服务器产生的会话ID,一般以Cookie的形式发送。在随后的客户端发起的每次请求中都以Cookie的形式将会话ID发送给服务器,这样既可以维持会话状态了。