由于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;
}
}
- 相关文章
- phpexcel设置行高及列宽,背景颜色,
- 单点登录sso原理及php实现方式及de
- 在php中用curl请求java接口无法获
- 免费ip地址查询接口
- php,java,android, aes加解密-加密
- 地图上计算两点间的距离
- 关于百度地图的一些技巧
- php中empty,is_null,isset的区别
- windows及linux下composer安装教程
- 一种精妙的数据查询与存储方式
- 热门文章
- win7中将文件拷贝到虚拟机linux下
- phpexcel设置行高及列宽,背景颜色,
- rabbitmq无法启动
- intellij idea不显示git push按钮
- php7中使用mongodb的aggregate进行
- centos7.4 64位下swoole安装及配置
- laravel页面静态化的方法
- navicate连接mycat报1184错误
- 单点登录sso原理及php实现方式及de
- devops-jenkins容器为pending状态
- 好评文章
- phpexcel设置行高及列宽,背景颜色,
- php7中使用mongodb的aggregate进行
- intellij idea打开文件所在文件夹
- windows下使用MongoDB Compass Com
- win7中将文件拷贝到虚拟机linux下
- laravel 中悲观锁 & 乐观锁的使用
- 单点登录sso原理及php实现方式及de
- navicate连接mycat报1184错误
- rabbitmq无法启动
- laravel整合dingo/api方法步骤:jwt
- 我的项目
- 【github】www.github.com/hurong241
- 【码云】gitee.com/hu_rong/projects
- 【docker hub】hub.docker.com/repositories/hurong241
- 【packagist】packagist.org/users/hurong241/packages
- 站点信息
- 建站时间:2011年
- 文章数:607篇
- 浏览数:941420