在客户端保存php对象



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

是——使用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);

您可以使用对象serialization/deserazlization,如本文所述,将php对象存储在html表单元素上,并通过GET方法传递php对象?

  • serialize对象并加密客户端上的输出xml字符串
  • 然后,当客户端发回请求时,您可以解密xml字符串,并使用deserialization在服务器端还原对象

关于加密请参阅这一条使用PHP 的最简单的双向加密

此外,您也可以使用如上所述的HTML5客户端本地存储,但默认情况下,这可能在旧浏览器中不起作用。请参阅localStorage支持的浏览器

同样,这实际上取决于你到底想要实现什么以及你想要存储什么样的数据,在某些情况下,你可以简单地使用服务器缓存,所以在这种情况下,根本不需要将整个对象存储在客户端上。

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

但是不要相信任何东西从客户端返回之前转发到客户端!

受到攻击的人可以很容易地更改或替换客户端的序列化对象。因此,在客户端存储服务器端对象是极其危险的

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

首先,序列化对象:

$serializedObject = serialize( $someObject );

接下来,使用客户端的本地存储保存对象(base64_encode()"隐藏"引号):

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

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

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

在反序列化过程中,PHP尝试__wakeup()序列化对象。如果类还没有被有序地定义,这种情况就不会正确发生。

最新更新