2014-02-15 58 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()序列化对象。如果班级没有有序定义,这将不会正确发生。