2012-06-16 32 views
0

我被稱爲類在我的劇本

$_SESSION['user']= 'username'; 

如果我贊同在某些函數這表明使用$_SESSION['user'];

Catchable fatal error: Object of class user could not be converted to string in /home/username/public_html/cart-admin/include/classes/class.auth.php 
+3

你在運行[Register Globals](http://bg2.php.net/manual/en/security.globals.php)嗎? – lanzz

+1

你確定這是你的代碼嗎?如果你有'$ _SESSION [$ user] =「username」'會更有意義,它更適合這個錯誤。 –

+1

$ user = new user(); – vascowhite

回答

0

好像你的腳本保存名爲user到$ _SESSION VAR的對象。這就是爲什麼你看不到username字符串,它可能會被腳本覆蓋。您必須使用其他關鍵字來存儲用戶名。

+0

但是'code'。 $ user =新用戶代碼。和'代碼'。 $ _SESSION [ '用戶'];'code'。是兩回事。 'code'。 $ user =新用戶代碼。是一個類和'代碼'。 $ _SESSION ['user'];'code'是我定義的變量。它發生在舊版本的php中。在新版本中不會發生 –

+0

您是否使用第三方腳本或框架?此腳本是否初始化用戶對象並將其設置爲SESSION var? – antoniom

+0

@SharanHayer,舊版本的PHP已註冊全局變量。禁用它。 – Matthew

1

號,$ _SESSION可能永遠與你user類的對象/實例衝突。

雖然你的狀態,這是你的實際代碼,很難相信你在你的腳本硬編碼'username'。 ;-)

假設您的實際代碼如下所示:

$user = new user; 
// ... many lines between ... 
$_SESSION['user'] = $user; 
// ... more lines between ... 
echo $_SESSION['user']; 

...那麼錯誤很容易解釋。當你這樣做時PHP試圖隱式地把這個變量中引用的對象(類user的一個對象)轉換成一個字符串,以便打印。

要檢查,如果我是正確的,你可以正確之前插入這個代碼的echo

echo "session variable 'user' is of type: ", gettype($_SESSION['user']); 

你要麼看到.. is of type: user這是我所期望的,或者你會看到​​,這是你想要的。

有此兩種可能的解決方法:

  1. 任一用戶名屬性(而不是對象)存儲該會話的內部。例如:$_SESSION['user'] = $user->getName();$_SESSION['user'] = $user->name;
  2. 使用user類中的魔術__toString() method (see manual)來使此隱式轉換成爲可能。在__toString()中,只需從user對象中返回用戶名即可。

我會選擇1,這是更重要的一點,並不會在會話中存儲用戶對象的序列化。

相關問題