Ben bir rapor ihracat yapmak için can sıkıcı bir sorun ile bir kayıp değilim. Temel olarak, bir düğmeye basıldığında ve bir rapor aşağıdaki javascript kullanarak sunucu tarafında oluşturulur: -
__callExportController(true, { op: 'build', type: exportType }, function(data) {
var outputURL = './reportinc/export_controller.php?op=output&filename=';
var reportFilename = data['filename'];
var reportTitle = data['title'];
if (reportFilename && reportTitle) {
var resultURL = outputURL + reportFilename + '&title=' + reportTitle;
/* Initiate the download dialog */
if (!$('#exportFrame').length) {
var hiddenIFrame = document.createElement('iframe');
hiddenIFrame.setAttribute('id','exportFrame');
document.body.appendChild(hiddenIFrame);
}
$('#exportFrame').attr('src', resultURL);
} else {
error('No filename or report title specified!');
}
});
Ihracat kontrolörün 'inşa' operasyonu sunucusunda geçici bir dosyaya rapor oluşturur. Eğer başarılı olursa, 'çıkış' operasyonu kullanıcıya indirme istemini almak için gizli bir iframe dosyasını çıkış denir. Internet Explorer 6/7 buradan kullanımda sadece tarayıcılar.
Bu iframe başarıyla inşa dosya ile talep edilecek sunucu üzerinde çıkış işleyicisi: -
/* Output handler */
case 'output':{
$filename = $_GET['filename'];
header('Content-Description: File Transfer');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Type: application/pdf");
/**
* NOTE: It appears this is required for some versions of adobe!
* http://www.acrobatusers.com/forums/aucbb/viewtopic.php?id=15400
*/
header("Cache-Control: private");
header("Pragma: cache");
header("Content-Disposition: attachment; filename=\"file.pdf\"");
header('Content-Length: ' . filesize($filename));
/* Flush the headers immediately for larger files */
ob_clean();
flush();
readfile($filename);
@unlink($filename);
}
Ben yaşıyorum sorun: Bu kez çalışıyor iken, oturum ilk başarılı dosya indirme sonra yıkılmış gibi görünmektedir. Kullanıcı yeni bir session id oluşturulacak görünen başka bir sayfaya uzak gittiğinde olmasıdır. Bu aynı zamanda, temel kimlik aldıkları sonraki eylem ile kullanımda ise 're-login' zorunda kullanıcı gerektirir.
Sorun çok aralıklı görünüyor ve o zamanlarda değil diğer zamanlarda gerçekleşmesi gibi görünüyor.
Herkes herhangi bir fikir? Daha başlıklarını veya tahrip olmaktan kullanıcıların oturumu önlemek için bir şeyler ekleyerek olmalıdır?