有没有办法在客户端保存php对象,所以当我进一步需要它时,我不需要让Ajax请求获得另一个新的。
答案 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
对象并加密客户端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()
序列化对象。如果类尚未按顺序定义,则不会正确发生。