Php 为什么我的会话没有保存数据?
我以前从未遇到过这种情况,但由于某种原因,当我使用AJAX设置会话变量时,会话将不会保存它们 以下是我所拥有的:Php 为什么我的会话没有保存数据?,php,session,session-variables,Php,Session,Session Variables,我以前从未遇到过这种情况,但由于某种原因,当我使用AJAX设置会话变量时,会话将不会保存它们 以下是我所拥有的: session_start(); if(isset($_POST['selected'])){ $_SESSION['user']['theme'] = array ('selected' => true); } // This should be now set with the value and it is for a time, but un
session_start();
if(isset($_POST['selected'])){
$_SESSION['user']['theme'] = array ('selected' => true);
} // This should be now set with the value and it is for a time, but unsets
if(isset($_POST['theme'])){
$_SESSION['user']['theme'] = array('name' => $_POST['theme']);
} // So should this
当我在两个if
结构下进行打印时,我看到的只是$\u会话['user']['theme']['name']
var,而另一个未设置。如果我在所选的变量下打印,我可以很好地看到它。在某个地方,选中的的键和值正在消失
为什么会这样?我希望看到名称
和被选中
您需要先启动会话
session_start();
if(isset($_POST['selected'])){
$_SESSION['user']['theme'] = array ('selected' => true);
}
还要检查$\u POST
值是否为非空
。您需要在会话中取消设置名称,然后按如下方式分配它
if(isset($_POST['theme'])){
unset($_SESSION['user']['theme']['name']);
$_SESSION['user']['theme'] = array('name' => $_POST['theme']);
}
在以任何方式访问会话变量的任何页面的开头,第一个命令必须是对session_start()的调用代码>正如我在评论中所说,您正在覆盖数组:)
我应该提到它并进行了更正,但它已经开始了。还要检查$\u POST值是否为空。这里的问题是我正在覆盖我的数组。我需要重写它。我只是想弄清楚怎么做。问题是在赋值中,您仍然在覆盖$\u SESSION['user']['theme']
变量。不@jeroen他正在分配一个带有name
键的数组。您每次都在覆盖数组吗$_会话['user']['theme']['name']=“无论什么”;是的,我想是的。我该如何写这篇文章,以便在用户主题下,我同时拥有名称和所选内容?好的。。我最初是这样写的,但是我得到了偏移量错误。它会产生一个警告,因为您同时生成一个键和变量,您可以在高兴的时候给变量加前缀以抑制警告。e、 g.$_SESSION['user']['theme']['name']=@$_POST['theme'];谢谢我真的不喜欢隐瞒错误。我怎样才能正确地写下它,使它不会出错?这是一个警告,而不是一个错误。它旨在指出你可能做了一些不同寻常的事情。如果这正是你想要做的,那也不是问题。您可以在登录时使用空变量生成整个数组,并在希望在会话数组中存储对象时分配值,并让这些对象的属性或方法存储并准确返回值:)。谢谢你的解释。我确实注意到,如果我检查forst以查看它是否已被设置,然后将其设置为空数组,则不会出现这些通知。我以前从来没有这样做过,但这正是让我发疯的原因。
session_start();
//changed it to unset if not in $_POST
$_SESSION['user']['theme']['selected'] = isset($_POST['selected']);
if(isset($_POST['theme'])){
$_SESSION['user']['theme']['name'] = $_POST['theme'];
} // and unset it too
else {
$_SESSION['user']['theme']['name']= "";
}