我有一個處理多部分表單帖子的servlet。這篇文章實際上是通過嵌入頁面的Flash文件上傳組件製作的。在一些瀏覽器中,Flash生成的POST不包含JSESSIONID,這使得我無法在後期加載會話中的某些信息。如何使用JSESSIONID手動加載Java會話?
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());
}
它增加了所有會話的ServletContext的由它們的唯一ID映射的屬性。我可以在上下文中放置一個會話地圖,但似乎是多餘的。請發表任何關於這個決定的想法。接下來,我將以下方法添加到我的servlet通過ID來解決會話:
private HttpSession getSession(final String sessionId) {
final ServletContext context = getServletContext();
final HttpSession session = (HttpSession) context.getAttribute(sessionId);
return session;
}
+1 ..非常好的問題 – peakit 2009-09-30 17:38:02