我在輸出報告時遇到了一個煩人的問題。基本上,一個按鈕被按下以及報告是使用以下的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!');
}
});
出口控制器的「構建」操作建立到服務器上的臨時文件的報告。如果成功,調用「輸出」操作將該文件輸出到隱藏的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);
}
我遇到的問題是:雖然這一次正常工作時,會議出現在第一次成功下載文件後被銷燬。也就是說,當用戶導航到另一個頁面時,他們似乎會生成一個新的會話ID。這也要求用戶在下一步採取的基本認證正在使用時必須「重新登錄」。
這個問題似乎非常間歇,似乎在有時發生,而不是在其他時間發生。
有沒有人有任何想法?我應該添加更多的頭文件或其他東西來防止用戶會話被破壞?
嗯,我敢肯定會話正在啓動無處不在,這是一個內部的Intranet基礎的應用使餅乾應* *絕對到處被啓用。這是特別令人沮喪的,因爲它現在似乎工作正常,非常間歇性:( – 2009-09-23 07:51:10
也許你的/ tmp文件定期清理,因此你的會話以同樣的方式清除 – knittl 2009-09-23 08:02:53