Я в недоумении с проблемой, связанной с экспортом отчета. В принципе, кнопка нажата, и отчет генерируется на стороне сервера, используя следующий JavaScript: -Сессия неожиданно потеряна?
__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!');
}
});
«Создайте» работа контроллера экспорта создает отчет во временный файл на сервере. Если это удастся, вызывается операция «output» для вывода этого файла в скрытый iframe, чтобы получить приглашение загрузки пользователю. Internet Explorer 6/7 - это единственные браузеры, которые здесь используются.
Это выходной обработчик на сервере которого IFrame будет запрашиваться с успешно построенным файлом: -
/* 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);
}
Проблема у меня есть: в то время как это когда-то работает нормально, то сессия, как представляется, быть уничтожен после первой успешной загрузки файла. То есть, когда пользователь переходит к другой странице, они, как представляется, генерируют новый идентификатор сеанса. Это также требует от пользователя «повторного входа», если базовая аутентификация используется с последующим действием.
Проблема кажется очень прерывистой, и, похоже, это происходит иногда, а не в другое время.
Есть идеи? Должен ли я добавлять больше заголовков или что-то, чтобы предотвратить уничтожение сеанса пользователей?
Ммм, я уверен, что сессия в настоящее время начали повсеместно и это внутреннее приложение, основанное интрасеть так печенье должно * обязательно * быть включен везде. Это особенно неприятно, потому что, похоже, сейчас работает нормально, очень прерывисто :( –
возможно, ваш файл tmp будет очищен на регулярной основе, и, таким образом, ваши сеансы будут очищены одинаково – knittl