2009-09-23 8 views
0

Я в недоумении с проблемой, связанной с экспортом отчета. В принципе, кнопка нажата, и отчет генерируется на стороне сервера, используя следующий 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); 
} 

Проблема у меня есть: в то время как это когда-то работает нормально, то сессия, как представляется, быть уничтожен после первой успешной загрузки файла. То есть, когда пользователь переходит к другой странице, они, как представляется, генерируют новый идентификатор сеанса. Это также требует от пользователя «повторного входа», если базовая аутентификация используется с последующим действием.

Проблема кажется очень прерывистой, и, похоже, это происходит иногда, а не в другое время.

Есть идеи? Должен ли я добавлять больше заголовков или что-то, чтобы предотвратить уничтожение сеанса пользователей?

ответ

0

может быть ваш отсутствующий session_name или session_start где-то.

или, скорее всего, у вас есть файлы cookie отключены. в этом случае сеансы действительны только для одного запроса на сайт

+0

Ммм, я уверен, что сессия в настоящее время начали повсеместно и это внутреннее приложение, основанное интрасеть так печенье должно * обязательно * быть включен везде. Это особенно неприятно, потому что, похоже, сейчас работает нормально, очень прерывисто :( –

+0

возможно, ваш файл tmp будет очищен на регулярной основе, и, таким образом, ваши сеансы будут очищены одинаково – knittl

Смежные вопросы