假设我有一个php会话数组:
$_SESSION[MyItems]=Array('A'=>"Apple", 'B'=>"Brownie", 'C'="Coin"))
用于显示用户访问的页面上的项目,我希望用户能够使用客户端javascript函数从显示中删除一个或多个项目(即隐藏项目的内容或者将div更改为display = none ...我现在知道如何处理这类事情。)而不是让我们重新回到服务器/页面重新加载。
当javascript从视图中删除项目时,如何同时从$_SESSION[MyItems]
数组中删除项目(即如果页面重新加载则不再出现?
我认为这个任务可能涉及将整个$_SESSION[MyItems]
数组转换为javascript数组,从中删除项目,然后让数组的javascript版本以某种方式覆盖$_SESSION[MyItems]
。这可行吗?
答案 0 :(得分:1)
所有会话数据都存储在cookie中,cookie可以访问客户端和服务器。所以你可以通过编辑cookie来做到这一点,但是应该避免这种做法和you should not do this
,因为会话只适用于服务器端。
希望它有所帮助:)
答案 1 :(得分:1)
这不是那么简单,因为PHP在服务器端运行,来自PHP的$_SESSION
对象在客户端不可用,其中javascript运行。
你需要在你的模板的头部放一些这样的东西(假设它是带有HTML内容的.php文件):
<html>
<head>
...
<script type="text/javascript">
//parse PHP to json-string for javascript initialisation
var MyItems = <?php echo json_encode ($_SESSION[MyItems], true); ?>;
</script>
</head>
<body></body>
</html>
然后你将在javascript中获得一个名为$_SESSION
的PHP MyItems
对象的副本。
但是对JS对象所做的更改不会保存到PHP对象中。
为此,您可以使用JQuery的$.post:
$.post ("target.php", { "MyItems": JSON.stringify (MyItems) }, function (result) {
if (result == "true")
//do something
else
//do something else
});
将target.php
文件看起来像这样:
<?php
$_SESSION['MyItems'] = json_decode ($_POST['MyItems']);
echo "true";
?>