我正在使用SWF上传器上传文件。我在服务器端使用Java。
Flash自动使Java Session无效。到目前为止,SWF团队尚未找到任何修复程序。
经过一些搜索,我找到了此链接,该链接讨论了在ASP中处理此问题的想法。
在基本的PHP中,我们将会话ID作为POST参数传递,并手动恢复会话。 在ASP.Net中,我们还发布会话ID,并使用Global.asax在还原会话之前捕获值,并动态添加正确的cookie。
在基本的PHP中,我们将会话ID作为POST参数传递,并手动恢复会话。
在ASP.Net中,我们还发布会话ID,并使用Global.asax在还原会话之前捕获值,并动态添加正确的cookie。
像那样,我们是否可以选择使用Java还原会话?
我还阅读了这篇帖子。但是我不明白他们在说什么。也许是因为,我在Java会话中听起来不够。
特别是upload_url: "Controller?action=33&JSESSIONID=<%=request.getSession().getId()%>",这条线。他在那条线上取得了什么成就。什么是Controller&action=33。
upload_url: "Controller?action=33&JSESSIONID=<%=request.getSession().getId()%>",
Controller
action=33
从客户端或服务器端恢复会话的任何建议都将更有价值!!
谢谢!
如果我正确阅读了链接的SO问题,则问题不是会话ID无效,而是服务器对待Flash对象的方式:它被视为附加客户端,而不是浏览器窗口其余部分的一部分。因此,创建了2个单独的会话,导致ID在上传时不同或为null。
解决方案是手动查找正确的会话ID,或强制服务器将正确的ID分配给新会话。这是通过将jsessionid作为变量转发到Flash,然后将其作为GET参数添加到HTTP上传请求中来完成的,因此可以在服务器上检索它,并且可以使用它来查找正确的会话。
在该示例中,作者使用Controllerservlet作为名称,并且action=33可能被用来在该servlet 上调用某些方法。这特定于此特定应用程序,但对您的解决方案并不重要。
对您而言重要的是字符串的结尾: &jsessionid=<%=request.getSession().getId()%>
&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); }