在客户端保存php对象

时间:2014-02-15 02:13:07

标签: javascript php html client-side

有没有办法在客户端保存php对象,所以当我进一步需要它时,我不需要让Ajax请求获得另一个新的。

3 个答案:

答案 0 :(得分:2)

是 - 使用HTML5 localStorage密钥保存您需要的任何数据:

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 :(得分:1)

您可以按照storing php objects on html form element and passing php objects through GET method?

中的说明使用对象serialization/deserazlization
  • serialize对象并加密客户端
  • 上的输出xml字符串
  • 然后,当客户端发回请求时,您可以解密xml字符串并使用deserialization
  • 恢复服务器端的对象

关于加密请参阅此Simplest two-way encryption using PHP

如上所述,您也可以使用HTML 5客户端本地存储,但默认情况下,这可能无法在旧版浏览器中使用localStorage supported browsers

同样,它实际上取决于您想要实现的内容以及要存储的数据类型,在某些情况下,您只需使用服务器缓存,因此在这种情况下,您无需将整个对象存储在客户端。

答案 2 :(得分:0)

当然,您当然可以在客户端存储PHP对象。 Eve一个对象,它包含对象的引用,数组作为成员变量......

  

不信任任何从客户那里回来的人   之前转发给客户!

受攻击者可以在客户端轻松更改或替换序列化对象。因此,在客户端存储服务器端对象非常危险

也就是说,这是如何在客户端存储PHP对象

首先,序列化对象:

$serializedObject = serialize( $someObject );

接下来,在客户端使用local storage 保存对象(base64_encode()'隐藏'引号):

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

最后,您可以使用例如将其传递回PHP端。表格的隐藏字段。

如果您需要将某些内容反序列化回其原始对象状态,请使用deserialize()。请注意,在执行反序列化操作之前,您需要require_once()每个对象的类定义。

在反序列化期间,PHP尝试__wakeup()序列化对象。如果类尚未按顺序定义,则不会正确发生。