2009-09-23 103 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!'); 
    } 
}); 

出口控制器的「構建」操作建立到服務器上的臨時文件的報告。如果成功,調用「輸出」操作將該文件輸出到隱藏的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。這也要求用戶在下一步採取的基本認證正在使用時必須「重新登錄」。

這個問題似乎非常間歇,似乎在有時發生,而不是在其他時間發生。

有沒有人有任何想法?我應該添加更多的頭文件或其他東西來防止用戶會話被破壞?

回答

0

可能是你丟失的某個地方的session_namesession_start

或更有可能的是,您的用戶禁用了Cookie。這樣會話只對一個站點請求有效

+0

嗯,我敢肯定會話正在啓動無處不在,這是一個內部的Intranet基礎的應用使餅乾應* *絕對到處被啓用。這是特別令人沮喪的,因爲它現在似乎工作正常,非常間歇性:( – 2009-09-23 07:51:10

+0

也許你的/ tmp文件定期清理,因此你的會話以同樣的方式清除 – knittl 2009-09-23 08:02:53