Сессия неожиданно потеряна?

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

Операция «build» контроллера экспорта строит отчет во временный файл на сервере. Если это удастся, вызывается операция «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); } 

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

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

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

Solutions Collecting From Web of "Сессия неожиданно потеряна?"

если домен верхнего уровня iframe не является равным, Ie вернется к протоколу p3p и удалит сеанс. добавление заголовка устранит эту проблему.

http://weblogs.asp.net/coltk/archive/2010/10/13/session-lost-in-iframe-p3p-issue.aspx

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

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