2010-05-08 210 views
-3

序列化做了什麼? 爲什麼我們需要序列化一個對象並再次反序列化它? 是否適用於任何安全措施?序列化和反序列化

+7

請問,你可以用google搜索這個...簡單樸實。對不起,我的粗魯,但我看到太多的情況下,通過搜索更容易找到信息,而不是問。 http://php.net/manual/en/function.serialize.php - 它都在那裏。 – 2010-05-08 21:50:04

+0

我想要能夠從自己的語言給出答案的人和開發人員的反覆練習......這些簡單易懂而不是書或文章。 – Kevin 2010-05-08 21:53:20

+0

我傾向於同意@Sune。這真是一個基本的問題。請在這裏提問之前,至少對您的問題進行合理的研究。謝謝! – 2010-05-08 21:53:45

回答

2

序列化是將對象轉換爲字符串的過程,然後可以將它們反序列化回原來的對象。

序列化對象的一個​​原因是將序列化對象(字符串)存儲到數據庫中,然後在檢索字符串並將其傳遞到unserialize時可以重新創建該對象。

+0

不一定是字符串。 – bmargulies 2010-05-08 21:52:45

+0

我不確定你指的是什麼,'serialize'返回一個字符串,不是嗎? – 2010-05-08 21:58:28

+1

在PHP中它可以,但在其他語言中它可能是一個字節流(如java) – 2010-05-08 21:59:37

1

對象不能作爲對象傳遞。我們將它們序列化爲文本,傳遞它們,然後反序列化它們,以便它們可以在多個位置或時間使用。

1

它用於將對象存儲在文件,數據庫或任何可以存儲字符串或將它們傳遞給其他應用程序/服務器/任何東西的對象中。

serialize()給出對象的字符串表示,而unserialize()從序列化的字符串重建對象。請記住,對象類定義必須仍然存在才能重建它。

PHP手冊幾乎解釋說,也...

4

序列化是轉動一個對象或一個對象圖成一種形式,是獨立於當前執行環境的具體的處理。

反序列化與序列化相反。它是讀取序列化期間寫入的數據並在當前執行環境中恢復對象或對象圖的過程。

序列化與Data Marshalling類似,都描述了將對象寫出爲獨立於執行的數據。然而,序列化通常是針對特定語言/平臺量身定製的,通常以主語言的習慣用法爲特徵,而數據編組旨在與語言無關,提供一定程度的互操作性。

序列化格式可能是不透明或透明的。例如,Java序列化是不透明的 - 數據不用於反序列化以外的其他目的。 Java還提供了一個XMLEncoder/XMLDecoder,它根據公共屬性將對象寫爲XML。該格式是透明的,可以輕鬆處理/操作。

序列化本身不是安全措施。事實上,在處理安全數據時它可能是一個漏洞。序列化的用戶應確保序列化數據至少保持與原始對象實例相同的安全級別。如果不這樣做,則會將數據開放至未經授權的使用。