2010-02-19 300 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