如何解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的问题
创始人
2024-12-11 03:40:37
0次

用ThinkPHP开发一个项目,集成了批量上传文件插件Uploadify,在谷歌Chrome和IE下都能正常上传,只有火狐下提示这个错误,网上找了很多解决办法,基本都说flash在firefox下重新发起session会话,由于session没有验证通过所以报错,这个问题网上有很多解决方案,但是试了很多,都没有真正解决我的问题,最后看了官方的解决方案
http://www.uploadify.com/documentation/uploadify/using-sessions-with-uploadify/
才真正解决,我用的是ThinkPHP框架,同时我开启了_initialize()(不知道这个函数的去看下ThinkPHP帮助手册),在这个函数里,我执行了一个检测用户是否登陆的验证函数,这样每次访问控制器,都会执行验证用户是否登陆有权限执行相应操作,但是因为在火狐中,flash发起的请求并没有连同SESSIONID一同发送到ThinkPHP控制器,所以导致了无法通过用户登陆请求,这时我们可以在uploadify的formData参数中定义一个SESSIONID,这样就可以通过$_POST或$_GET的方法将SESSIONID发送到控制器,在控制器把传递过去的SESSIONID设置为当前会话的SESSIONID,这样就可以通过验证了,但是,这里需要注意一条,重新设置SESSIONID必须要放在执行验证登陆函数的前边,否则无效,因为如果登陆验证不通过,那么后边的代码就都不会执行了,我之前就犯了这样的错误,将重置SESSION放到了上传文件处理的函数中,下面贴上详细的代码,以供大家参考:

客户端(ThinkPHP上传文件模板)代码

$(function()
 {

   $('#file_upload').uploadify({

    'formData' 

: {

     '<{:session_name()}>'

: '<{:session_id()}>',
//此处获取SESSIONID

     'timestamp'

: '<{$timestamp}>',

     'token' 

: '<{$token}>'

    }

     //后边对于解决本问题无关代码省略。。。

    })

}

服务器端(ThinkPHP控制器)代码

//初始化执行

 public

function 
_initialize(){

  //此处为解决Uploadify在火狐下出现http
 302错误 重新设置SESSION

  $session_name

= session_name();

  if

(isset($_POST[$session_name]))
 {

   session_id($_POST[$session_name]);

   session_start();

  }

   //执行登陆验证检测函数

  $this->powerverify();  

 }

为大家分享了我自己亲身实例之外,还在网上找到了其他朋友的实例进行了整理,希望对大家的学习有所启发。

标题:PHP Uploadify 火狐下报 302错误
大概原因:在Uploadify官网已经说明,是说Flash有一个Bug它提交请求的时候不会自动带session,所以浏览器判断没有获取到session值,我用的ThinkPHP框架,_initialize(){}(在执行其他方法前会先执行这个函数,我用它来判断用户是否登录),在这个函数中,我照网上的方法:
基本思路:根据Flash这个bug的原理来做的,就是我们把session值作为一个参数一起上传.
Uploadify官网也说了解决之道:给一个选项
formData: {‘SESSION NAME':'SESSIOIN ID'}----------------json格式
我用隐藏域把这些变量保存在模板中(值可以得到),然后在js文件中我直接写作:

var session_name = (使用Jquery通过选择器获取得到值)
var session_id = (同上);
formData: {session_name, session_id},

其他解决思路:
这个问题确实存在,其实这个问题可以转化为session丢失。虽然您针对session进行了特殊处理,作为参数传入,但是不代表您服务端正确获取,建议您进入debug模式跟踪一下服务器端是否正确获取参数,并顺利加载session。另外还有个问题,如果您当前打开url与您提交form的url是一样的,还得记得加上随机数。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...