技术开发 频道

Java Web 应用程序中怎么样进行会话管理

  【IT168 资讯】Java Web应用程序的会话管理崩溃会涉及到以下几点:一般流程、Cookie使用情况、URL重写和会话销毁。

  本文将介绍在Java Web app中会话管理的工作原理。为了了解流程的工作原理,先从下面这个图开始:

Java Web 应用程序中怎样进行会话管理

  1. 用户提交一个网页请求。

  2. 浏览器将请求发送到Web服务器。

  3. 服务器识别到请求中没有“会话相关信息/标识符”。所以它创建了一个新的会话(和一个新的会话标识符-JSESSIONID)。

  4. 服务器将JSESSIONID发送回客户端。

  5. 这时,服务器和客户端都具有与它们相同的会话标识符(JSESSIONID)。

  6. 从这里开始,当浏览器向服务器发送附加请求时,必须将会话标识符(JSESSIONID)作为请求的一部分发送。(注意:每当浏览器向Web服务器发送请求时,同一服务器设置的所有Cookie将自动发送到请求中,因此JSESSIONID cookie也会自动发送到服务器上)

  7. 当服务器获得请求时,它会检查浏览器是否将会话标识符作为请求的一部分发送。如果是,则服务器将请求视为同一会话的一部分。

  8. 这种关联关系会持续进行,直到会话被破坏(或直到它到期)为止。

  如果Cookie被阻截怎么办?

  有时,用户/浏览器可能不接受某些服务器的Cookie(出于安全/隐私的原因)。为了处理这种情况,Web服务器还支持在URL中传递会话标识符(URL重写):

  1. 当服务器创建会话时,它“必须”以某种方式将会话标识符发送给客户端(以便客户端可以在后续请求期间将其发送回服务器)。

  2. 最初,服务器不知道客户端是否已经阻截了cookie。所以它以两种方式将JSESSIONID发送给客户端:

  A. 在一个cookie中

  B. 作为网址参数(例如http://www.abc.com; jsessionid = 123xyz)。

  3. 当服务器从同一客户端获取后续请求时:

  A. 如果请求包含了JSESSIONID cookie,则表示客户端确实接受了Cookie。因此,服务器可以依靠Cookie进行会话管理并继续。

  B. 如果没有,服务器就会知道Cookie被阻截了,并继续使用URL参数方法(“URL重写”)。

  会话是如何被摧毁的?

  1. 超时:如果服务器在一段时间内没有收到给定会话的任何请求,则将使会话无效。当用户关闭浏览器或将其打开而没有任何活动时,就会发生这种情况。

  2. 显式注销页面:Servlets / JSP可以使用session.invalidate()使会话无效。

  浏览器关闭时会发生什么?

  1. Cookie方法:JSESSIONID Cookie是一个“仅限会话”的Cookie,因此浏览器关闭后浏览器会将其删除。因此,如果您打开另一个窗口并访问相同的Web应用程序,则服务器将该请求视为不属于任何会话的全新请求。

  2. URL重写方法:如果您使用JSESSIONID复制URL,请关闭浏览器,打开一个新的浏览器窗口并使用复制的URL。前提是会话没有超时。但这也带来安全风险(JSESSIONID的完整URL被盗用)。这就是为什么Cookie优先于URL重写的原因之一。

0
相关文章