php中用uploadify上传时session丢失
关键词: 发布时间:2014-08-16 19:13:44 浏览次数:2517

由于uploadify插件传送数据的时候是不能传输session及cookie的,有时候我们上传完图片,希望将图片名称等保存在session中,以免用户刷新网页的时候丢失又要重新上传,但实际测试中发现,大部分浏览器中会存在session丢失的问题,比如火狐及360但是在部分高级别的ie浏览器中又不会丢失,网上有人说要卸载windows的某个补丁,这不太方便;

由于http会话是基于无状态的,一旦网页关闭session就结束了,那么没有关闭网页的时候,服务和客服端是如何保证一一对应,不会把传给A电脑的数据传送给B电脑呢,原理是这样的,每次打开网页的时候浏览器会记录一个PHPSESSID的cookie,这个就是你电脑与服务连接时的sessionid,与服务器一一对应,这样服务器就知道是哪台电脑与他连接,就不会出现上面所说的把A的数据发送给B的问题;也就是说session是基于cookie存在的,如果cookie被禁,session也用不了了。


明白了这个原理,那我们在用ajax方式提交的时候,可以将这个PHPSESSID也传递过去,然后在接收的地方重新将这个值赋值给cookie中名为PHPSESSID的cookie,让服务器保持连接状态,这样session就不会丢失了;


在模板中传递PHPSESSID


<script type="text/javascript">
        $(function() {
            //点击保存按钮
            $("#saveTouxiang").click(function(){
                var touxiang=$("#touxiang").val();
                if(touxiang==''){
                    alert('请先上传一张图片');
                    return false;
                }
            });
            //uploadify上传
            $('#file_upload').uploadify({
                'formData'     : {
                    'uid':'{{$uid}}',
                    'cookieTimeOut':'{{$cookieTimeOut}}',
                    'type':'{{$type}}',
                    'PHPSESSID':'{{$sessionid}}'//PHPSESSID要与cookie中的名称一致
                },
                'swf'      : '__PUBLIC__/uploadify/uploadify.swf',//swf路径
                'uploader' : '{{:U("Ucenter/uploadify")}}',//后台处理程序路径
                'width':120,//上传按钮尺寸
                'height':30,
                'buttonImage':'__PUBLIC__/uploadify/browse-btn.png',//按钮图片地址
                'fileTypeExts':'*.jpeg;*.jpg;*.png;*.gif',//允许上传的文件类型
                'onUploadSuccess':function(file,data,response){
                    var arr=data.split('|');
                    var status=arr[0];
                    var msg=arr[1];
                    if(status){
                        $("#photo").attr("src","__ROOT__/{{$upload_dir}}"+msg+"?"+Math.random());
                        $("#sphoto").attr("src","__ROOT__/{{$upload_dir}}"+msg+"?"+Math.random());
                        $("#touxiang").val(msg);
                    }else{
                        alert('上传失败,只允许上传jpg,jpeg,gif,png格式的图片,且不能大于2M');
                    }
                }
            });
        });
</script>




接收并处理数据


    private function _upload(){
    import('ORG.Net.UploadFile');
            $upload=new UploadFile();
            $upload->maxSize=2*1024*1024;    // 上传文件的最大值
            $upload->supportMulti=false;    // 是否支持多文件上传
            $upload->allowExts=C('canUploadType');    // 允许上传的文件后缀 留空不作后缀检查
            $upload->thumb=true;    // 使用对上传图片进行缩略图处理
            $upload->thumbMaxWidth='300';// 缩略图最大宽度,多个用逗号分开
            $upload->thumbMaxHeight='800';// 缩略图最大高度,多个用逗号分开
            $upload->thumbPrefix='';// 缩略图前缀,多个要分别指定
            $upload->thumbPath=$this->upload_dir.date('Ym').'/';// 缩略图保存路径  
            $upload->thumbRemoveOrigin=true;// 是否移除原图
            $upload->thumbType=0; // 缩略图生成方式 1 按设置大小截取 0 按原图等比例缩略
            $upload->autoSub=true;// 启用子目录保存文件
            $upload->subType='date';// 子目录创建方式 可以使用hash date custom
            $upload->dateFormat='Ym';//子目录方式为date的时候指定日期格式
            $upload->savePath=$this->upload_dir.date('Ym').'/';// 上传文件保存路径
            $upload->uploadReplace=true;// 存在同名是否覆盖
            $upload->saveRule=I('uid',0,'intval');//生成文件名称的前辍
            if(!$upload->upload()) {// 上传错误提示错误信息
                $msg=$upload->getErrorMsg();//错误信息
                echo '0|'.$msg;
            }else{// 上传成功 获取上传文件信息
                $info =  $upload->getUploadFileInfo();
                $pic=$info[0]['savename'];//图片存储位置及名称 201x/xx.xxx
                cookie('PHPSESSID',I('PHPSESSID'));//有些浏览器里面ajax方式是不传递session的,这种方式间接传递,否则下面这句session会丢失
                session($this->uploadify_name,$pic);//这个地方有些浏览器中会丢失
                echo '1|'.$pic;
            }
    }

赞:(0)
踩:(0)
相关文章
phpexcel设置行高及列宽,背景颜色,
在php中用curl请求java接口无法获
单点登录sso原理及php实现方式及de
免费ip地址查询接口
php,java,android, aes加解密-加密
地图上计算两点间的距离
关于百度地图的一些技巧
php中empty,is_null,isset的区别
windows及linux下composer安装教程
一种精妙的数据查询与存储方式
热门文章
win7中将文件拷贝到虚拟机linux下
php中用uploadify上传时session丢
laravel页面静态化的方法
centos7.4 64位下swoole安装及配置
centos7.4下php7.25多线程pthreads
微信扫一扫在哪
php-fpm经常卡死
单点登录sso原理及php实现方式及de
phpexcel设置行高及列宽,背景颜色,
一个简单的laravel分表联合查询
好评文章
php7中使用mongodb的aggregate进行
windows下使用MongoDB Compass Com
phpexcel设置行高及列宽,背景颜色,
laravel 中悲观锁 & 乐观锁的使用
laravel整合dingo/api方法步骤:jwt
在php中用curl请求java接口无法获
laravel页面静态化的方法
一个简单的laravel分表联合查询
laravel对具体的路由不采用csrfTok
php7 mongodb distinct及count方法
标签
rabbitmq mysql备份 elasticsearch
站点信息
建站时间:2011年
文章数:500篇
浏览数:253628
粤ICP备18028092号-1  微信:hurong241