如果我正确阅读了链接的SO问题,则问题不是会话ID无效,而是服务器对待Flash对象的方式:它被视为附加客户端,而不是浏览器窗口其余部分的一部分。因此,创建了2个单独的会话,导致ID在上传时不同或为null。
解决方案是手动查找正确的会话ID,或强制服务器将正确的ID分配给新会话。这是通过将jsessionid作为变量转发到Flash,然后将其作为GET参数添加到HTTP上传请求中来完成的,因此可以在服务器上检索它,并且可以使用它来查找正确的会话。
在该示例中,作者使用Controller
servlet作为名称,并且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);
}