我有一个处理多部分表单POST请求的servlet。该POST实际上是由嵌入在页面中的Flash文件上传组件发出的。在某些浏览器中,Flash生成的POST不包括JSESSIONID,这使得在POST期间从会话加载某些信息变得不可能。
flash上传组件确实在一个特殊的表单字段中包含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());
}
这段代码将所有session以其唯一id为键添加到ServletContext的属性中。我可以在上下文中放置一个sessions的Map,但这似乎是重复的。请发表对此决定的任何想法。接下来,我在我的servlet中添加以下方法以通过id解析session:
private HttpSession getSession(final String sessionId) {
final ServletContext context = getServletContext();
final HttpSession session = (HttpSession) context.getAttribute(sessionId);
return session;
}