2013-08-01 37 views
0

也許我太累了...但我想不出在這段代碼中的會話ID是如何成爲143從149

echo "session id is".$_SESSION['userid']; 
$smarty->assign('itemresults',$arr2); 

$_SESSION['userid'] 

if (isset($_REQUEST['id'])) 
{ 
    $userid=$_REQUEST['id']; 
} 
else 
{ 
echo "session id 1 is".$_SESSION['userid']; 
    $userid=$_SESSION['userid']; 
} 
echo "session id 2 is".$_SESSION['userid']; 

輸出:

session id is149session id 2 value is143 

UPDATE:

好吧剛剛發現,如果我改變了var $用戶ID的問題是沒有更多的,但爲什麼值分配給$用戶ID將修改$ _SESSION [「用戶標識」],以及?

下面的代碼工作:

if (isset($_REQUEST['id'])) 
{ 
    $userid2=$_REQUEST['id']; 
} 
else 
{ 
echo "session id 1 value".$_SESSION['userid']; 
    $userid2=$_SESSION['userid']; 
} 
+1

如果您找到解決方案,您可以回答自己的問題並驗證它以便更改此問題的狀態。 –

+0

你打開了全局變量嗎? – Pitchinnate

+0

如果賦值給var會改變別處的值,那麼開始查看該var是否曾被定義爲某處的引用。例如$ userid&= $ something_else。 –

回答

1

register_globals開啓,這是一個潛在的安全漏洞(很容易陷入如你已經注意到),和一個死衚衕(它是從不見了5.4)。

http://www.php.net/manual/en/ini.core.php#ini.register-globals

是否要註冊EGPCS(環境,GET,POST,餅乾,服務器)變量作爲全局變量。

從PHP 4.2.0開始,此指令默認爲關閉。

有關相關信息,請閱讀有關Using register_globals的安全章節。

警告

此功能已被棄用的PHP 5.3.0和去除PHP 5.4.0的。

+0

謝謝,默認情況下,我們的託管服務提供商已啓用此功能,但在我們的開發服務器上沒有。儘管社區決定將其刪除,但這是多麼愚蠢的設置。 – Athanatos

0

你做出$userid到會話價值的參考,也許?我可以或多或少複製這樣的:

<?php 
session_start(); 

// Put 10 in the session 
$_SESSION['userid'] = 10; 

// Get a reference to that session variable (note the `&`) 
$userid = &$_SESSION['userid']; 

// Increment 
$userid++; 

echo $_SESSION['userid']; // 11