swfupload上传文件提示“错误302”的解决方法
成功志
swfupload上传文件提示“错误302”的解决方法
2014-11-21 ok12
以前用谷歌浏览器打开页面使用swfupload上传文件挺正常的,今日却来个“错误:302”提示,傻眼了我。

百度一下,得到的结果基本上都是说SESSION的问题,说flash在谷歌浏览器、火狐浏览器不能传递session,需要添加一个判断:

if(isset($_POST['PHPSESSID'])){

    session_id($_POST['PHPSESSID']);

}

但自己却不知道这段代码添加在哪。最后谷歌搜索了一下,看到一篇文章,其中说到“swfuplaod在上传时,会新开一个进程,和原来的进程不一致,要解决这个问题,需要指定session_id,然后在登录页面判断,如果有 post过来的session_id,那么就用函数session_id( $_POST['PHP_SESSIONID'])指定一下。”(其实他已经说的很清楚,怪自己笨啊没完全理解),然后自己也搜索了一下错误302的意思,最后终于找到原因的所在了。

问题原因应该是这样的:

因为swfupload是用flash上传文件的,然而由于flash在谷歌、火狐等浏览器中不能够传递session和cookie,所以在需要登陆验证的地方无法通过(不能带session或cookie),也就相当于上传文件时遇到防火墙,无法通过。

解决的方法:

swfupload中有一个post_params参数设置,我们可以通过设置:

post_params: {"PHPSESSID" : "<?php echo session_id(); ?>"}

当点击上传的时候,会通过POST方法传递PHPSESSID(即$_POST['PHPSESSID']),然后在登陆验证处添加如下代码:

if(isset($_POST['PHPSESSID'])){
session_id($_POST['PHPSESSID']);
}else{
//否则就在这里正常验证
}

当然,为了安全,我们可以在post_params中再添加一项参数,如:

post_params: {"PHPSESSID" : "<?php echo session_id(); ?>","isadmin":"<?php echo $isadmin; ?>"}

然后在登陆验证处添加:

if(isset($_POST['PHPSESSID']) && $_POST['isadmin']=="你设置的$isadmin的值"){
session_id($_POST['PHPSESSID']);
}else{
//否则就在这里正常验证
}

来源于《小虾虎鱼http://www.xiaoboy.com》
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容