您好我正在使用Uploadify上传照片。 当用户被记录时,他的 ID 存储在会话中,但在通过Uploadify上传任何内容后,他的 ID 将从会话中删除,因此看起来他没有登录。
我尝试将会话ID 和会话名称的 ID 作为 scriptData 传递,但它没有工作要么。当用户登录并尝试上传时,上传会话是干净的(没有用户ID 和上传的照片名称存储)。 当用户未登录时,会话包含上传的照片名称 ...
这是.js:
$(document).ready(function() {
$('#fileUpload').uploadify({
'uploader' : '{/literal}{$PATH_TO_ROOT}{literal}scripts/js/uploadify/uploadify.swf',
'script' : '{/literal}{$URL_PREFIX}{$tc->get('uploadify')}{literal}',
'scriptData' : {'PHP_SESS_ID': '{/literal}{$sessionId}{literal}','PHP_SESS_NAME':'{/literal}{$sessionName}{literal}'{/literal}{if $user},'PHP_SESS_UZIV':'{$user->get('Id')}'{/if}{literal}},
'cancelImg' : '{/literal}{$PATH_TO_ROOT}{literal}scripts/js/uploadify/cancel.png',
'fileDataName' : 'Filedata',
'fileExt' : '*.jpg;*.gif;*.png',
'fileDesc' : 'Image Files',
'sizeLimit' : 5242880, // 5x1024x1024 bytes
'auto' : false,
'buttonText' : 'VYBERTE FOTKU',
'buttonImg' : '{/literal}{$PATH_TO_ROOT}{literal}scripts/js/uploadify/uploadify-butt-{/literal}{$lang}{literal}.jpg',
'rollover' : true,
'width' : 300,
'height' : 45,
'hideButton' : false,
'method' : 'post',
'multi' : false,
'onAllComplete' : function(event,data) {
window.location.href = '{/literal}{$URL_PREFIX}{$tc->get('photo-uploaded')}{literal}';
}
});
});
这是后端脚本:
if (!empty($_FILES)) {
$session_id = $_POST["PHP_SESS_ID"];
$session_name = $_POST["PHP_SESS_NAME"];
session_id($session_id);
session_name($session_name);
if (isset($_POST["PHP_SESS_UZIV"])) {
$user_id = $_POST["PHP_SESS_UZIV"];
$_SESSION['sess_us_id'] = $user_id;
}
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = dirname(dirname(__FILE__)) . '/img/';
$newName = time() . '_' . StripAccent($_FILES['Filedata']['name'], '', false, false);
$targetFile = str_replace('//','/',$targetPath) . $newName;
$savePic = savePic($targetPath, $newName, -590, -500, 100, $tempFile);
$saveThumb = savePic($targetPath, getThumbName($newName), -185, -142, 100, $targetFile);
$_SESSION['uploadedPhoto'] = $newName;
}
感谢您的帮助
编辑:我发现这个代码适用于一个,但不是其他服务器......
答案 0 :(得分:3)
这对我有用:
在您的代码中显示文件上传按钮:
<?php
session_start();
?>
....
$(function() {
$('#file_upload').uploadify({
'formData' : {
'PHPSESSID': '<?=session_id()?>'
},
'buttonText' : 'Upload',
'displayData': 'speed',
'swf' : 'uploadify.swf',
'uploader' : 'uploadify.php',
'onUploadSuccess' : function(file, data, response) {
....
}
});
});
和uploadify.php 这样做:
session_id($_POST['PHPSESSID']);
session_start();
就是这样,所有会话数据都可以在uploadify.php中访问。 适合我。
希望我能帮助别人。
答案 1 :(得分:0)
您究竟使用什么来生成此Javascript?
'scriptData' : {'PHP_SESS_ID': '{/literal}{$sessionId}{literal}','PHP_SESS_NAME':'{/literal}{$sessionName}{literal}'{/literal}{if $user},'PHP_SESS_UZIV':'{$user->get('Id')}'{/if}{literal}},
这是从PHP中回应出来的吗? $ sessionID,$ user,$ PATH_TO_ROOT等在哪里定义?
在您的示例上传处理代码启动之前,是否在某处执行了session_start()?没有它,当脚本退出时,所有会话操作都将消失。您必须为PHP调用session_start()以保留$ _SESSSION。
确保Uploadify实际上获得了正确的会话名称/ ID - 如果它们弄错了,那么您的代码会将会话ID /名称重置为真实会话之外的其他内容,并且您最终会得到你有的症状 - 消失上传数据 - 因为它进入了其他会话。
同样,您的脚本中似乎没有任何错误处理并假设上传成功。至少你应该:
if ($_FILES['Filedata']['error'] === UPLOAD_ERR_OK) {
... process upload ...
} else {
die("Upload failed with error code #" . $_FILES['Filedata']['error']);
}
仅仅因为_FILES数组不为空并不意味着上传成功。 PHP仍然会尽可能多地填写有关上传的信息,包括错误代码,这意味着无论上传的成功/失败,都会始终存在该数组中的数据。
答案 2 :(得分:0)
您是否恰好使用Internet Explorer进行测试?
答案 3 :(得分:0)
http://www.uploadify.com/documentation/uploadify/using-sessions-with-uploadify/
$('#file_upload).uploadify({
// Your normal options here
formData : { '<?php echo session_name();?>' : '<?php echo session_id();?>' }
});
在Uploadify中:
//uploadify.php
$session_name = session_name();
if (!isset($_POST[$session_name])) {
exit;
} else {
session_id($_POST[$session_name]);
session_start();
}