【问题标题】:changing session variable not working更改会话变量不起作用
【发布时间】:2014-06-18 12:33:44
【问题描述】:
<?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();

}

我觉得这与它有关

【问题讨论】:

  • $cards = new deck(); $cards = unserialize($_SESSION['cards']); ?

标签: javascript php ajax session


【解决方案1】:
function dealCard(){

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

}

将我的 js 函数更改为此,它现在可以工作了。异步搞砸了。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-10
      • 2015-09-30
      • 2013-04-12
      • 2012-08-17
      • 2014-05-16
      相关资源
      最近更新 更多