2012-06-23 72 views
0

我有以下代碼:爲什麼在get變量中使用會話名稱和會話ID不起作用?

$location .= 'red=no&'.session_name() . "=". session_id(); 
$content = file_get_contents($location); 
echo $content; 

如果我運行它,並指出將顯示在我的瀏覽器。但是,如果我修改它在以下方式:

$location .= 'red=no'; 
$content = file_get_contents($location); 
echo $content; 

一切工作正常(我看到我的瀏覽器中的內容)。

奇怪的是,如果我從第一個示例(url)中顯示$ location變量的值並手動將其粘貼到瀏覽器的地址行中,我確實看到了內容。所以,我的瀏覽器不能使用這個URL和file_get_contents

有沒有人知道如何解釋?

+0

'echo session_name();'''echo session_id();'print out?你是否用'session_start();'實例化會話? – ashurexm

+0

會話名稱:無論會話ID:c8ec2afe8bb7388175f2065f1cb0c868 – Roman

+0

是的,在一開始我有'session_start' – Roman

回答

0

這沒有意義。如果文件是遠程的,並且$ location是一個url,那麼我認爲發生的事情是遠程服務器不會通過$ _GET獲取會話ID(或者它拒絕服務器發出請求時服務器給出的那個)或者其他)。

如果文件是本地的,那麼問題是,你顯然有一個名爲紅色文件=沒有任何& = c8ec2afe8bb7388175f2065f1cb0c868。實際上,在這種情況下,我懷疑該文件可能被命名爲red = no。如果不是的話,那麼&符號就會丟掉東西。逃避它,你沒事。

或者不要使用這麼可怕的文件名。

+0

我給出的代碼位於'en.example.org/index.php'。從代碼中,我給你只能看到$ location的一部分。該位置的值是:'example.org/index.php?red=no&whatever=c8ec ...'。你說服務器可能不會通過獲取變量來接受會話,但爲什麼當它將地址放在地址行中時它會工作? – Roman

+0

當您清除瀏覽器的Cookie時它工作嗎?或更好的,但在另一個瀏覽器中提出請求? – dogglebones

+0

你在做什麼(請求一個http客戶端使用提供給另一個http客戶端的會話發出請求)稱爲會話欺騙。 'example.org'不會讓這個工作。 – dogglebones