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


Why is my session not holding its data?

我以前从未遇到过这种情况,但由于某种原因,当我使用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构造下执行print_r时,我看到的只是$_SESSION['user']['theme']['name'] var,而另一个没有设置。如果我在selected变量下进行print_r,我可以很好地看到它。在某个地方,selected的密钥和价值正在消失。

为什么会发生这种情况?我期待看到nameselected

正如我在评论中所说,您正在覆盖数组:)

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']= "";
}

您需要首先启动session

session_start();
if(isset($_POST['selected'])){
      $_SESSION['user']['theme'] = array ('selected' => true);
}

还要检查$_POST值是否为not empty。您需要在会话中取消设置名称,然后像一样分配它

if(isset($_POST['theme'])){
    unset($_SESSION['user']['theme']['name']);
    $_SESSION['user']['theme'] = array('name' => $_POST['theme']);
} 

在以任何方式访问会话变量的任何页面的开头,第一个命令必须是对session_start(); 的调用