java应用uploadify 3.2丢失session
java应用uploadify 3.2丢失session
http://c-bai.iteye.com/blog/1829269
uploadify上传用的是一个flash插件。
flash中有个bug就是自身创建一个session,这样就导致与web本身的session不一致 权限验证失败的问题。 就是这个问题 让我花了好多时间来解决
查询百度 、google、以及stackoverflow多日 大都是写php和asp.net中的例子
这让我很头疼,最终在某个博客 看到解决的 问题,经过本人测试 这个解决方法可行,跟大家分享一下 ,以及下次自己碰到一样问题的时候方便查阅
原因:
因为uploadify是不会自动传送session值的,所以当session被拦截后,它的请求是发不出去的(补充,还有一种情况就是uploaddify是使用flash来处理文件文件上传,而在在非IE浏览器(Firefox,Chrome)下使用flash方式向服务器发起请求,是会新生成一个session的(此时旧的session则丢失了),如果要避免这个问题,需要把当前的sessionId作为形参传给servlet类);
1 $("#uploadify").uploadify({ 2 'swf' : basePath+'js/component/uploadify/js/uploadify.swf', 3 'uploader' : 'uploadFile.action;jsessionid=<%=session.getId(%>', // 上传到后台的处理类 4 'cancelImg' : [b][b][/b][/b]basePath+'js/component/uploadify/img/uploadify-cancel.png', // 取消按钮的图片 5 'fileObjName' : 'uploadify', // 传到后台的对象名 6 'queueID' : 'fileQueue', 7 'fileSizeLimit' : '8589934592', // 限制文件上传的大小 8 'formData' :{'userId':userId}, 9 'progressData' : 'percentage', //有speed和percentage两种,一个显示速度,一个显示完成百分比 10 'buttonText' : '添加附件', // 按钮上的文字 11 'auto' : false, // 是否自动上传 12 'multi' : false, // 是否支持多文件上传 13 'removeComplete': false, 14 'onQueueComplete' : function (queueData){ 15 alert("上传完毕!"); 16 17 } 18 });
补充:uploadify上传时,只要一初始化就会发出一个请求,而这个请求是当前页面的地址,
解决方法是:
将jquery.uploadify.min.js(我用的版本是3.2)原来的代码:
1 1 this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url);this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url)
替换为:
1 1 this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url);this.settings.button_image_url = this.settings.button_image_url ? SWFUpload.completeURL(this.settings.button_image_url) : this.settings.button_image_url
【签名→→→】【****知其然知其所以然****】
工具只能帮助我们解决我们认识到的问题,解决不了我们都没理解的问题。
不能再把一切扔给框架、容器、工具!
首先理解你的业务逻辑,理解你要实现的功能,
然后搞清楚框架、容器、工具会帮助我们做什么。
只有理解了自己的业务逻辑,理解了自己的代码,理解了自己要用到的第三方代码,
才能真正完美地实现我们需要的功能!
浙公网安备 33010602011771号