如何使用 JSESSIONID 手动加载 Java 会话?
2022-09-01 08:59:23
我有一个处理多部分表单帖子的servlet。该帖子实际上是由嵌入在页面中的Flash文件上传组件制作的。在某些浏览器中,Flash生成的POST不包括JSESSIONID,这使我无法在发布期间从会话中加载某些信息。
闪存上传组件在特殊表单字段中包含 Cookie 和会话信息。使用此表单字段,我实际上可以检索 JSESSIONID 值。问题是,我不知道如何使用这个JSESSIONID值来手动加载该特定会话。
编辑 -基于ChssPly76的解决方案,我创建了以下HttpSessionListener实现:
@Override
public void sessionCreated(final HttpSessionEvent se) {
final HttpSession session = se.getSession();
final ServletContext context = session.getServletContext();
context.setAttribute(session.getId(), session);
}
@Override
public void sessionDestroyed(final HttpSessionEvent se) {
final HttpSession session = se.getSession();
final ServletContext context = session.getServletContext();
context.removeAttribute(session.getId());
}
这会将所有会话作为由其唯一 ID 映射的属性添加到 ServletContext 中。我可以将会话地图放在上下文中,但这似乎是多余的。请发布有关此决定的任何想法。接下来,我将以下方法添加到我的 servlet 中,以按 id 解析会话:
private HttpSession getSession(final String sessionId) {
final ServletContext context = getServletContext();
final HttpSession session = (HttpSession) context.getAttribute(sessionId);
return session;
}