2010-02-19 145 views
0

用戶將點擊一個鏈接打開一個新頁面(代碼如下)。我的問題是,當這個新頁面打開時,它會創建一個新的會話ID。我如何阻止這種情況發生?PHP會話變量

require_once('../../config.php'); //Database connection details 
require_once('../../connect.php'); //Connect to database 

session_start(); <----------- HERE 


if(isset($_GET['id'])) 
{ 

$id = $_GET['id']; 
$tbl_uploads = $_SESSION['COMPANY_ID'].'_uploads'; 

$query = "SELECT username, type, size, content FROM $tbl_uploads WHERE id = '$id'"; 

$result = mysql_query($query) or die('Error, query failed'); 
list($username, $type, $size, $content) = mysql_fetch_array($result); 

header("Content-length: $size"); 
header("Content-type: $type"); 
header("Content-Disposition: inline; filename=$username"); 
echo $content; 

mysql_close($link); 
exit; 
} 

回答

1

確保您對文件 error_reporting(E_ALL);

我覺得你在這裏有一些其它的錯誤的第一條線,在session_start()應該不會影響這一點。

+0

我補充說,在,並沒有報告錯誤。該頁面保持空白! – Michael 2010-02-19 16:51:57

0

是否$_GET['id']實際設置?在最初的if上打一個else子句,如果不是,則拋出某種錯誤。也許有些東西將你的點擊變成POST。

+0

這是,我檢查過。如果我刪除了session_start();並更改代碼以輸入特定的表名替換$ tbl_uploads,它的工作原理!我試過把session_write_close();函數在標題前面,但這也沒有幫助! – Michael 2010-02-19 17:20:17

+0

此腳本是否與原始鏈接位於不同的域(子域)上運行?或者在另一條路上?也許您的會話cookie的主機標識符太嚴格,並且此腳本不屬於「真實」會話邊界,因此您將獲得新會話。 – 2010-02-19 18:08:25

2

任何所需的文件實際上都會發送任何輸出。如果是這樣,session_start()應該在它們之前。

+0

您需要更好地聲明if語句!我會建議在第一次僞裝後使用問號。 ;) – 2010-02-19 17:41:47

+0

從現在開始考慮。謝謝 :) – Alfabravo 2010-02-19 19:12:44

0

session_start()可能是問題。當你開始一個會話時,它應該創建一個會話ID。無論如何,這就是我的看法。你可以包含session_start()的代碼嗎?

0

你爲什麼不試試這個:

$sid = session_id(); 
if ($sid == ""){ 
     //Session should be created 
     session_start(); 
}//else Session already exists