解决uploadify上传文件session失效的问题

据线上反馈,某个页面上传文件的时候失效,刷新页面后退出系统,于是在 beta 环境上尝试复现,成功,是个稳定的 bug,于是开始了探索、解决之旅。

打开 Chrome 浏览器控制栏,仔细观察了下上传前后请求的变化,发现每当点击上传按钮上传文件时,都会更新 session_id。嚯,这个隐隐有种熟悉的感觉,再尝试几次后,定位到是上传组件 uploadify 的问题。这是个 flash 插件,以前遇到过一次,那时是在火狐浏览器上,每次上传文件都会遇到 session 失效情形,于是就用了个 hack 方法解决问题。

先是在上传 url 上手动传递 session id。

$(uploadIdName).uploadify({
	...
    'uploader' : '/upload?<?php echo session_name();?>=<?php echo session_id();?>',
	...
})

然后在项目入口处判断是否直接传,然后恢复 session

$sid = session_name();
if (isset($_GET[$sid])) {
    session_id($_GET[$sid]);
}
session_start();

两把斧下去,问题解决。但是呢,不够优雅,也存在隐患,毕竟是项目入口处直接判断。于是又往深了趴,发现了这个组件为什么会出现 session 失效的原因。

In Uploadify, the Flash file is what communicates with the backend script. Because of a bug in Flash, the 
session cookie is not picked up by the Flash file. To circumvent this, you will need to pass the session data
via theformDataoption. To do this in PHP, use the following code when initializing Uploadify on the front-end page.

大概的意思是,Uploadify 组件使用 Flash 与后台通讯,但由于 Flash 有个 bug,就是在上传文件的时候,不会提取当前页面的 Cookie。这样一来就豁然开朗了,原来是每次上传文件时,就如同一次登陆,会生成新的 session id,老的 session 数据用不上了,导致上传失效,刷新退出。不过此组件也给出了比较优雅的解决方法,如下

$(uploadIdName).uploadify({
	...
	'formData' : {
	   '<?php echo session_name();?>' : '<?php echo session_id();?>',
	},
	...
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值