2009-10-15 107 views
2

iam有點混亂,我去年開始學習php 5 OO方式。第一個項目是用Zend框架完成的。OOP - 會話和PHP

但是我的一些朋友正在討論將對象存儲在$ _SESSION超全局數組中。但是,我不能找到一個很好的例子,爲什麼或當這是nesecarry?

這將是偉大的,如果有人可以給我一個提示,爲什麼要在會議中存儲對象。

+1

你通常*不*需要將它們存儲在會話中。無論如何,你可能不應該傳遞大量數據......也許是一個ID或兩個,但就是這樣。也就是說,將這些數據放入一個對象並將其傳遞給對象沒有任何問題。 – mpen 2009-10-15 05:54:35

+0

ty for accept ....:D – 2009-10-15 06:25:12

回答

4

會話本質上是一個變量,你可以存儲任何你想要的東西,數字,字符,字符(字符串),結構.....對象。

它也是一個變量,通過頁面保持不變。其最commanly用於保存用戶登錄信息

我如何使用Session對象如下:

可以說我有一個用戶表在我的數據庫,我需要顯示的名字,大多名字我的所有網頁的。

我能做些什麼兩樣東西......老辦法:

$result = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE userId=1")); 
$_SESSION['userId'] = $result['userId']; 
$_SESSION['firstname'] = $result['firstname']; 
$_SESSION['lastname'] = $result['lastname']; 

現在你可以做到這一點是不錯,但它會是好多了,如果你已經可以說下面的代碼:

class user{ 
    _construct($userId){ 

     $qry_str = mysql_query("SELECT * FROM users WHERE Id=$userId"); 

     $result = mysql_fetch_array($qry_str); 
     $this->userId = $userId; 
     $this->firstname = $result['firstname']; 
     $this->lastname = $result['lastname']; 
    } 

    public $userId, $firstname, $lastname; 
} 

並初始化

$_SESSION['user'] = new user(1); 

或者說多用戶:

$_SESSION['user'][1] = new user(1); 
$_SESSION['user'][2] = new user(2); 
$_SESSION['user'][3] = new user(3); 

然後在你的代碼中,你需要做的是:在登錄時通過userId指定用戶,然後使用存儲的類來顯示所有信息。

有很多更強大的事情你可以用類做。但上面顯示了一個簡單而有效的解決方案。

試試這個:如果添加和statments死statments在構建用戶類......這構建用戶時,你可以錯誤檢查

希望這有助於

+0

其優先序列化對象然後存儲在會話中。也訪問需要反序列化 – 2016-11-23 07:34:16

2

HTTP是無狀態的。如果你想在不同的頁面抓取之間獲得數據到persist,你需要一些其他的機制。 Cookie是一種方式,但由於它們存儲在客戶端,所以它們在服務器上不可信。 $_SESSION是持久可靠的存儲方法之一。最常見的用法是登錄系統。請注意,會話ID來自客戶端,因此它們不可信,但您可以確定會話本身中存儲的數據不會被欺騙。另一種選擇是使用數據庫,但是您必須添加代碼以序列化/反序列化或以其他方式將存儲在數據庫中的數據轉換爲PHP對象或從其中轉換。數據庫關於會話的一個優點是數據不能在會話之間輕鬆共享。

至於存儲對象而不是其他類型,這只是您的特定應用程序使用的問題,但它不是必需的。以登錄示例爲例,如果要在對象中存儲經過身份驗證的用戶信息(例如用戶ID和客戶端IP地址),則可以將該對象存儲在$_SESSION之內。

又例如,假設您正在編寫一個使用對象來模擬消息的消息傳遞應用程序(例如論壇,電子郵件)。消息可以有附件,但附件表單是一個單獨的頁面,因此您將消息對象存儲在$_SESSION中。不是最實用的設計,而是常見的設計,儘管AJAX的出現並不那麼容易。