在ssh项目中集成了swfupload做文件上传,之前一直都工作得挻好,直到新杀到一员工,他的机器新颖,预装的是IE9,我叫他卸了,装IE8(因为项目主要是在IE8中使用),结果win7提示不能装IE8.得了,那就用IE9吧,顶多再装一个IETester.就这样,这位新同学一直用他的IE9测试系统,有一天他发一个bug,就是用IE8能上传文件,用IE9就不行,神马...上传文件都跟浏览器有关系...晴天霹雳...亲自去验证了下,结果真是这样.是什么回事呢...苦思一阵,无果.只有断点调试了.发现请求根本没有传给action,而是被权限过滤器(Filter)给栏住了,此过滤器会去session中取出登录用户,并验证是否有权访问此URL,结果在session中没有取到用户,而直接拒绝访问此URL,怎么会在session中取不到用户呢,经过努力调试发现,swfupload上传文件时,重新创建了一个session,此新session肯定找到不到登录用户.于是想能不能让它不创建session,而重用现在的session呢.最后还是找到解决方案,那就是使用URL重写技术,将jsessionid写在url后面,就可以重用现在的session了.
没有使用URL重写技术的示例代码如下:
var settings={ upload_url: "/common/adjunct.do?method=swfuploadFile", //... }; swfu = new SWFUpload(settings);
var settings={ upload_url: "/common/adjunct.do;jsessionid="+jsessionid+"?method=swfuploadFile", //... }; swfu = new SWFUpload(settings);注意:上面的jsessionid变量的值是当前session对象的id(request.getSession().getId())