我正在使用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
。
从客户端或服务器端恢复会话的任何建议都会更加赞赏!!
谢谢!
答案 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);
}