通过传递session_id解决uploadify上传PHP中丢失SESSION值的问题

/ 0评 / 0

 

由于uploadify通过flash提交上传的文件,会导致在接收文件的PHP端出现获取SESSION值为空的情况,如果你要在PHP端验证用户的登录状态或验证用户输入的验证码是否正确你就需要解决SESSION取值的问题,下面给出uploadify上传中获取SESSION的方法:

页面上:

 

(document).ready(function() {('#file_upload').uploadify({

'uploader'  : 'uploadify/uploadify.swf',

'script'    : 'uploadify.php',

'cancelImg' : 'uploadify/cancel.png',

'folder'    : 'uploads/file',

 'formData': { 'session': '<?php echo session_id();?>'}, 

'onComplete'  : function(event, ID, fileObj, response, data) {

alert(response);

}

});

});

 

后台 uploadify.php :

如果框架里默认session_start();先session_destory();

然后写如以下代码:

if (_REQUEST['session']){

session_id(_REQUEST['session']);

session_start();//注意此函数要在session_id之后

}

 

解释:程序恢复session,首先要知道session_id,大家通过手册可以知道session的恢复通过session_id(id);但是在恢复时要注意一个先后顺序,要得到之前session的内容,必须在session_start()之前执行session_id(id),这样才能在执行了session_start时初始化session的时候恢复到之前的内容,否则的话你得到的是一个空的session,你什么也得不到。之前session被重新初始化了。这个和session_start()的作用有密切关系,因为session_start告诉php,session要初始化,要从session文件中反序列化session内容,所以session_start的作用就是把之前存储的文件内容反序列化。session_start序列化之前要知道session_id,如果没有就生成一个新的session_id,如果有就反序列化相应文件的内容。