会话变量有时会停止工作

时间:2015-11-24 08:48:54

标签: php session-variables

我目前正在使用PHP来存储一些值(会话变量)和一些游戏逻辑函数,而Javascript方面主要用于渲染和玩家控件。

之前它运行良好,但现在游戏开始崩溃,我意识到Session的变量没有显示正确的值,就像它们已经更新一样。奇怪的是这个游戏在网址内没有“www”的情况下运行正常,通常发生在游戏的第二轮。下面是游戏开始崩溃时返回错误值的函数:

    function TakeCurrentTurn(){            
            $currentTurn = $_SESSION["CurrentTurn"];
            if ($currentTurn == $_SESSION["LastTurn"]){
                $_SESSION["LastTurn"] = 0;
            }

            if ($currentTurn == 1){
                OnPlayerMoved();
            }else{
                OnAiMoved();
            }

            if (GetSelectedCardCount($currentTurn) > 0){
                if (CsIsAllow($currentTurn) == true){
                    DrawSelectedCard();
                    $_SESSION["LastTurn"] = $currentTurn;
                }else{
                    UnselectAllCard($currentTurn);
                }
            }

            IncreaseCurrentTurn();        
            session_write_close();

            $img = [];
            $img[] = GetDeckImg(2);
            $img[] = GetDeckImg(3);
            $img[] = GetDeckImg(4);
            if ($_SESSION["LastTurn"] == $currentTurn && $currentTurn != 1 && $currentTurn != 0){
                $img4Count = count($img[2]);
                for ($i=0; $i<$img4Count; $i++){
                    $img[$currentTurn-2][] = $img[2][$i];
                }
            }

            echo implode(",", $img[0])." ".implode(",", $img[1])." ".implode(",", $img[2])." ".$currentTurn;
        }

当GetDeckImg函数从另一个Session变量返回值时,IncreaseCurrentTurn函数会增加$ _SESSION [“CurrentTurn”]的值。

当整个事件崩溃时,我注意到返回值显示的值与前一个响应相同。我不确定是什么导致了这个问题。我已将session_start()放在文件的顶部(在error_reporting(E_ALL)下面)并使用session_write_close(),但似乎无法解决问题。

编辑:

function IncreaseCurrentTurn(){
        $_SESSION["CurrentTurn"] += 1;
        if ($_SESSION["CurrentTurn"] > 3){
            $_SESSION["CurrentTurn"] = 1;
        }
    }

function GetDeckImg($player){
        $count = count($_SESSION["Poker"][$player]);
        $deck = [];

        for ($i=0; $i<$count; $i++){
            $card = $_SESSION["Poker"][$player][$i];
            $deck[] = $card['img'];
        }
        return $deck;
    }

Edit2(更新信息): 经过多次检查后,我意识到服务器在错误发生时返回了之前的结果。当我再次重新发送最后一个请求时,它将返回正确的结果(此刻这正是我正在处理的问题......)。我也注意到这个问题只发生一次(或从不)每场比赛,一旦我重新发送最后一个请求并得到正确的结果,游戏的其余部分将正常运行。

0 个答案:

没有答案