小编典典

SWF Flash Uploader使JSESSIONID无效。从服务器端或客户端还原会话的任何想法?

java

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

Flash自动使Java Session无效。到目前为止,SWF团队尚未找到任何修复程序。

经过一些搜索,我找到了此链接,该链接讨论了在ASP中处理此问题的想法。

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

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

像那样,我们是否可以选择使用Java还原会话?

我还阅读了这篇帖子。但是我不明白他们在说什么。也许是因为,我在Java会话中听起来不够。

特别是upload_url: "Controller?action=33&JSESSIONID=<%=request.getSession().getId()%>",这条线。他在那条线上取得了什么成就。什么是Controlleraction=33

从客户端或服务器端恢复会话的任何建议都将更有价值!!

谢谢!


阅读 271

收藏
2020-11-26

共1个答案

小编典典

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

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

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

对您而言重要的是字符串的结尾: &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); 
}
2020-11-26