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

时间:2013-09-02 04:30:51

标签: 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 unsets

    if(isset($_POST['theme'])){
        $_SESSION['user']['theme'] = array('name' => $_POST['theme']);
    } // So should this

当我在两个if构造下执行print_r时,我看到的只是$_SESSION['user']['theme']['name'] var而另一个未设置。如果我在selected var下面执行print_r,我可以很好地看到它。在某处,selected的关键和价值正在消失。

为什么会这样?我希望同时看到nameselected

3 个答案:

答案 0 :(得分:1)

您需要先启动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']);
} 

答案 1 :(得分:1)

就像我在评论中说的那样,你要覆盖阵列:)

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

答案 2 :(得分:0)

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