gpt4 book ai didi

解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

最近用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上传文件模板)代码 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$( function ()
  {
 
    $( '#file_upload' ).uploadify({
 
     'formData'
 
: {
 
      '<{:session_name()}>'
 
: '<{:session_id()}>' ,
//此处获取SESSIONID
 
      'timestamp'
 
: '<{$timestamp}>' ,
 
      'token'
 
: '<{$token}>'
 
     }
 
      //后边对于解决本问题无关代码省略。。。
 
     })
 
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//初始化执行
 
  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文件中我直接写作:

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

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

以上就是针对ThinkPHP下使用Uploadify插件火狐上传报302错误的解决方法,希望对大家的学习有所帮助.

最后此篇关于解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法的文章就讲到这里了,如果你想了解更多关于解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com