2014-02-15 53 views
0

有沒有什麼方法可以在客戶端保存php對象,所以當我進一步需要它時,我不需要發出Ajax請求來獲得另一個新對象。在客戶端保存php對象

+0

調查[localStorage](http://www.html5rocks.com/en/features/storage) –

+0

PHP對象,沒有。與PHP對象相對應的JavaScript對象,是的。這也取決於你「保存」的意思。如果您從服務器獲取數據,它將存儲在內存中,只要該頁面「存在」,您就可以隨時訪問它。或者你是否要求在頁面加載之間保持存儲? –

回答

2

是 - 使用HTML5localStorage鍵保存任何你需要的數據:保存到瀏覽器的本地存儲

localStorage["hi"] = "ho"; 

// and then later ... 
alert(localStorage["hi"]); 

字符串將持續存在,當用戶導航到一個新的網站上的網頁,或者返回您的網站稍後。它的瀏覽器支持非常好 - 即使IE8 +也支持它。

一個注意:你只能保存字符串數據。所以,如果你有一個對象,那麼你就需要使用JSON.stringify/JSON.parse:

var user = { firstName: "foo", lastName: "bar" }; 
localStorage["name"] = JSON.stringify(user); 

// and then later ... 
var restoredUser = JSON.parse(localStorage["name"]); 
if (restoredUser) 
    alert("Hi, " + restoredUser.firstName); 
1

可以使用對象serialization/deserazlization這裏storing php objects on html form element and passing php objects through GET method?

  • serialize對象和加密解釋上客戶端去
  • 然後當客戶端請求發送輸出XML字符串返回可以解密XML字符串,並通過使用deserialization
恢復服務器端對象

關於加密看到這樣一個Simplest two-way encryption using PHP

而且也是上面所說的,你可以使用HTML 5客戶端本地存儲,但這種可能不會被默認在舊的瀏覽器看到工作localStorage supported browsers

而且又把它真的取決於什麼你確實想要達到什麼樣的數據你想存儲,在某些情況下,你可以簡單地使用服務器緩存,所以在這種情況下,你根本不需要在客戶端存儲整個對象。

0

當然,你肯定可以在客戶端存儲一個PHP對象。夏娃的對象,其中包含引用對象,數組成員變量...

不要相信任何從客戶端回來,你 之前轉發給客戶端!

攻擊者可以很容易地更改或替換客戶端的序列化對象。因此,這是極其危險的在客戶端存儲服務器端對象。

這就是說,這裏是如何存儲PHP對象在客戶端

首先,連載對象:

$serializedObject = serialize($someObject); 

接下來,節約使用local storage的對象客戶端(base64_encode()隱藏引號):

<script type="text/javascript"> 
    localStorage["soAccessor"] 
     = "<?php echo base64_encode($serializedObject); ?>"; 
</script> 

最後,您可以使用例如PHP將其傳遞迴PHP端。一種形式的隱藏領域。

如果需要反序列化返回到原始對象狀態的東西,請使用deserialize()。請注意,在進行反序列化操作之前,您需要對每個對象的類定義require_once()

在反序列化期間,PHP嘗試對__wakeup()序列化對象。如果班級沒有有序定義,這將不會正確發生。