原标题:Java Web 应用程序中怎么样进行会话管理
[ ]
【IT168 资讯】Java Web应用程序的会话管理崩溃会涉及到以下几点:一般流程、Cookie使用情况、URL重写和会话销毁。
本文将介绍在Java Web app中会话管理的工作原理。为了了解流程的工作原理,先从下面这个图开始:
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. 作为网址参数
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重写的原因之一。