swfupload上传文件提示“错误302”的解决方法

以前用谷歌浏览器打开页面使用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》
本博客所有文章如无特别注明均为原创。作者:sysdee复制或转载请以超链接形式注明转自 成功志
原文地址《swfupload上传文件提示“错误302”的解决方法
分享到:更多

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)