SWF Flash Uploader使JSESSIONID无效。有没有想过从服务器端或客户端恢复会话?

时间:2011-01-14 23:58:46

标签: java flash session

我正在使用SWF上传器上传文件。我在服务器端使用java。

Flash自动使Java Session无效。 SWF团队到目前为止没有找到任何解决办法。

经过一些搜索后,我找到了这个link,它讨论了在ASP中处理这个问题的想法。

  

在基本PHP中,我们将会话ID作为POST参数传递并手动恢复会话。

     

在ASP.Net中,我们还发布会话ID并使用Global.asax来捕获值   在会话恢复之前,动态添加正确的cookie。

就像那样,我们可以选择在java中恢复会话吗?

我也经历了这篇StackOverFlow帖子。但我无法理解他们究竟在说什么。也许是因为,我在java会话中听起来不够。

尤其是upload_url: "Controller?action=33&JSESSIONID=<%=request.getSession().getId()%>",这一行。他用这条线实现了什么。什么是Controller&amp; action=33

从客户端或服务器端恢复会话的任何建议都会更加赞赏!!

谢谢!

1 个答案:

答案 0 :(得分:3)

如果我正确阅读了链接的SO问题,问题不在于会话ID无效,而是服务器处理flash对象的方式:它被视为一个额外的客户端,而不是浏览器窗口其余部分的一部分。因此,会创建2个单独的会话,导致id在上载时不同或为null。

解决方案是手动查找正确的会话ID,或强制服务器为新会话分配正确的ID。这是通过将jsessionid作为变量转发到Flash,然后将其作为GET参数添加到HTTP上载请求来完成的,因此可以在服务器上检索它,您可以使用它来查找正确的会话。

在该示例中,作者使用Controller作为servlet的名称,action=33可能用于调用其上的某些方法。这特定于此特定应用程序,但对您的解决方案并不重要。

对您来说最重要的是字符串的结尾:&jsessionid=<%=request.getSession().getId()%>

此JSP代码实质上将java会话ID添加到包含上载请求URL的变量中。您可以使用普通Java或任何其他有权访问正确会话ID的语言来执行此操作 - 重要的是首先将其传输到Flash插件,然后添加到上传请求中然后再次发送回服务器,然后用于查找或创建正确的会话ID以处理上传。

这是作者用于创建新会话cookie的代码:

if (request.getParameter("JSESSIONID")!=null) { 
    Cookie userCookie = new Cookie("JSESSIONID", request.getParameter("JSESSIONID"));    
    response.addCookie(userCookie); 
}