更改会话变量不起作用

时间:2014-06-18 12:33:45

标签: javascript php ajax session

<?php
    session_start();

    include 'cardclass.php';
    $cards = new deck();
    $cards = unserialize($_SESSION['cards']);

    $cards->drawCard();
    $cards->pushBack();

    $_SESSION['cards'] = serialize($cards);

    exit();

?>

我有一个php页面,创建一个套牌然后随机播放然后存储在会话中。现在我有了这个代码,它获取会话对象绘制卡片并将卡片放到卡片的后面,然后保存到会话。现在,当我打电话给我4次时,我得到“4颗心4颗心4颗心4颗”,而不是4张不同的卡片。我相信它,因为它没有正确地保存会话。

编辑:

function dealCard(){
    var xmlhttp = new XMLHttpRequest();

     xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                document.getElementById("computer").innerHTML+=xmlhttp.responseText;    

            }
    }

    xmlhttp.open("GET","dealcard.php",true);
    xmlhttp.send();

}

我觉得这与它有关

2 个答案:

答案 0 :(得分:0)

function dealCard(){

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET","dealcard.php",false);
    xmlhttp.send();
    document.getElementById("computer").innerHTML+=xmlhttp.responseText;    

}

将我的js功能更改为此功能,现在可以使用了。异步正在弄乱它。

答案 1 :(得分:-1)

我在这里看不到任何可能影响会话处理的内容,你确定甲板课程按照要求工作吗? 尝试在单个PHP脚本中多次运行drawCard()和pushBack()并检查结果。

编辑:由于他删除了答案,因此在此行之下不再相关。

knizhnikov在他的回答中说的似乎并不适用于此,在PHP脚本完成后,会话变量的更改会在服务器端保存。如果在发送输出后运行session_start(),则只会出现问题,因为该函数需要发送cookie标头。