2016-04-12 132 views
-1

我有要保留在會話中的用戶信息。我正在使用memcache作爲會話保存處理程序。我有兩個方法,用於存儲用戶信息會話變量的性能影響PHP

$_SESSION['uname'] = 'abx'; 
$_SESSION['email'] = '[email protected]'; 
$_SESSION['profilepage'] = 'http://t'; 
$_SESSION['role'] = '1'; 
$_SESSION['profilepicture'] = 'http://t'; 
$_SESSION['gender'] = 'M'; 

OR

$obj = new stdClass(); 
$obj->uname = 'abx'; 
$obj->email = '[email protected]'; 
$obj->profilepage = 'http://t'; 
$obj->role = 1; 
$obj->profilepicture = 'http://t'; 
$obj->gender = 'M'; 
$_SESSION['user'] = $obj; 

我想知道哪一種方法更好。多個會話變量是否有任何性能影響。

+1

運行基準。 –

+0

我們在談論多少數據?你在會話中多久閱讀一次? – st2erw2od

+0

更多的用戶信息數據將在那裏。凡是我需要用戶數據的地方都會使用會話。 – coder

回答

2

只有你在問題和評論中提到的這個小數據量對性能的影響很小,根本不存在。在內部,你可以通過基準測試來測量一些非常小的差異,但這不會加快速度。

在這種情況下,我會嘗試考慮清潔,可重用和可維護的代碼優於性能的好處。第二個面向對象的方法在我看來更有意義,被認爲是最佳實踐。

1

除了st2erw2od的回答(我完全同意他),我只想補充一點,對我來說這聽起來不像一個會話的好用例。

會話不應包含用戶的所有數據和/或包含userdata的完整對象。它應該只包含必要的數據,例如哪個用戶被認證。然後根據特定的規則(例如,當他們需要或完整的用戶實體等)從數據庫(文件系統等)加載其他任何東西,例如他的電子郵件地址,個人資料圖片等等。所以在這種情況下,我建議只保存會話中的用戶ID,然後從數據庫加載信息。

這樣做的主要優點是:a)更清晰(更少代碼); b)您的信息始終是最新的並與數據庫同步,否則您可能會遇到一些嚴重的錯誤。

+0

我同意,感謝您添加此信息以幫助OP。 – st2erw2od

+0

@Andreas同意有限的信息應該存儲在會話中,但最小的必需信息應該在會話或緩存層。否則,在每個頁面上,您將額外擊中DB – coder

+0

@ user524694:無論如何,您必須點擊數據庫才能加載更多信息。如今,你通常使用某種類型的模型,無論如何都需要加載。 – Andreas