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{ //否则就在这里正常验证 }
相关内容
这些是最新的
热门排行
- THINKPHP5+GatewayWorker+Workerman 开发在线客服系统
- 在手机浏览器网页中点击链接跳转到微信界面的方法
- 尊云网站目录系统 ThinkPHP5网站分类目录程序 v2.2.221011
- CentOS 7安装shadowsock(一键安装脚本)
- AdminTemplate 基于LayUI 2.4.5实现的网站后台管理模板
- 用NW.js(node-webkit)开发多平台的桌面客户端
- PHP生成随机昵称/用户名
- THINKPHP5网站分类目录程序 尊云网站目录系统
- 织梦(DEDECMS)微信支付接口 微信插件
- 基于LayUI开发的 网站后台管理模板 BeginnerAdmin
- 响应式后台网站模板 - AMA.ADMIN
- layuiAdmin后台管理模板 Iframe版
- LayUI 1.0.9 升级 至 LayUI 2.1.4 方法
- 简洁清爽的会员中心模板
- jQuery幸运大转盘抽奖活动代码