我正在使用 SWF Uploader 上传文件。我在服务器端使用java。
Flash 自动使 Java session 失效。 SWF 团队到目前为止还没有找到任何修复程序。
经过一番搜索,我发现了这个link ,其中讨论了在 ASP 中处理此问题的想法。
In basic PHP we pass the session id as a POST parameter and manually restore the session.
In ASP.Net we also post the session id and use a Global.asax to catch the values before the session is restored and dynamically add the right cookies.
像我们有什么选项可以恢复java中的 session 吗?
我也经历过这个StackOverFlow邮政。但我无法理解他们到底在说什么。也许是因为,我的java session 不够健全。
特别是upload_url: "Controller?action=33&JSESSIONID=<%=request.getSession().getId()%>",
这条线。他用这条线实现了什么?什么是Controller
& action=33
.
任何从客户端或服务器端恢复 session 的建议将更加感激!!
谢谢!
最佳答案
如果我正确地阅读了链接的SO问题,问题不是 session ID的失效,而是服务器处理flash对象的方式:它被认为是一个额外的客户端,而不是浏览器窗口其余部分的一部分。因此,会创建 2 个单独的 session ,导致上传时 id 不同或为 null。
解决方案是手动查找正确的 session ID,或者强制服务器将正确的ID分配给新 session 。这是通过将 jsessionid 作为变量转发到 Flash,然后将其作为 GET 参数添加到 HTTP 上传请求来完成的,这样就可以在服务器上检索它,并且您可以使用它来查找正确的 session 。
在示例中,作者使用 Controller
作为 servlet 的名称,并且 action=33
可能用于调用其上的某些方法。这是特定于该特定应用程序的,但对于您的解决方案并不重要。
对您来说重要的是字符串的结尾:&jsessionid=<%=request.getSession().getId()%>
这段 JSP 代码本质上是将 java session id 添加到包含上传请求 URL 的变量中。您可以使用纯 Java 或任何其他能够访问正确 session ID 的语言来执行此操作 - 重要的是它首先传输到 Flash 插件,然后添加到上传请求中,然后再次发送回服务器,然后然后用于查找或创建正确的 session ID 来处理上传。
这是作者用来创建新 session cookie 的代码:
if (request.getParameter("JSESSIONID")!=null) {
Cookie userCookie = new Cookie("JSESSIONID", request.getParameter("JSESSIONID"));
response.addCookie(userCookie);
}
关于java - SWF Flash Uploader 使 JSESSIONID 无效。有想法从服务器端或客户端恢复 session 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4697162/