Php 为什么我的会话没有保存数据?

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

我以前从未遇到过这种情况,但由于某种原因,当我使用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 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']= "";
}