在不在客户端上的服务器上设置和获取PHP会话

时间:2011-03-26 11:08:52

标签: php jquery ajax session client-server

我在依赖会话方面遇到问题,无法对不同的计算机进行实时更新。所以这是场景:

[电脑A]管理页面: 如果单击按钮,则无论计算机是否访问该网站,都会在网站的每个页面上显示某些文本。

[计算机B]客户端页面: 我必须实时查看我页面上的文字,而无需在管理员点击按钮时加载它。

这是我的代码:

管理页面:admin.php

$("#newFight").click(function(){
                var newFight = "newFight="+1;
                $.ajax({
                    type:       "post",
                    url:        "../includes/newfight.php",
                    data:       newFight,
                    cache:      false,
                    success:    function(html){
                        if(html == 0){
                            alert("Open a Game First");
                        }
                        else if(html == 1){
                            $("#newFight").attr('disabled', 'disabled');
                            // Real time update of fight sequence
                            $("td#fightId").load('../includes/getfight_id.php');
                            $("td#fightHead").html("<em>Fight is on.</em>");
                        }
                    }
                });
            });

管理页面:newfight.php

session_start();
require_once('dbconn.php');
 if(isset($_POST['newFight'])){
        if($_POST['newFight'] == $_SESSION['gameActive']){
            // Make a new fight
            echo $msg = 1;
            $query = "INSERT INTO fights(fight_game_id) VALUES(".$_SESSION['game_id'].")";
            $execQuery = mysql_query($query);
            $last_id = mysql_insert_id();
            $_SESSION['fight_id'] = $last_id;
            $_SESSION['fight_active'] = 1;
        }
        if($_POST['newFight'] != $_SESSION['gameActive']){
            $msg = 0;
            echo $msg;
        }
    }
?>

这里的过程是这样的,如果单击一个按钮,jQuery将通过AJAX处理它并设置会话ex:$ _SESSION ['button_clicked'] = 1;供用户参考,因此可以使用setInterval(客户端)实时更新用户页面。

这是客户端页面,假设只要管理员点击按钮就可以实时更新。

客户页面:client.php

 $(function(){
            var auto_refresh = setInterval(
               function (){
                  $("td#fightHeadUser").load('../includes/fightheaduser.php');
               }, 1000);
 });

客户端页面:fightheaduser.php

session_start();
if(isset($_SESSION['fight_active']) && $_SESSION['fight_active'] == 1){
    echo "<em>Fight is on.</em>";
}
if(!isset($_SESSION['fight_active']) && $_SESSION['fight_active'] != 1){
    echo "<em>No fight yet.</em>";
}

所以我的问题是..它只能在一台计算机上运行,​​所以当我打开两个浏览器(管理员和客户端),然后点击按钮时,我可以看到客户端的页面是实时更新的,但是当一个不同的时候计算机通过局域网访问客户端的页面,它不会对它们起作用。所以我怀疑这是因为会话只存储在我的电脑上,这就是为什么它不会在其他电脑上工作。

您认为我必须做什么?如果你可以建议我一个很好但不同的解决方案,那么我很乐意尝试。

对不起我很长的问题。 TIA。

2 个答案:

答案 0 :(得分:2)

我认为您不能使用会话来解决此问题,因为每个用户(连接)都会获得另一个会话,并且无法从管理会话中获取数据。

您可以使用环境变量。每个连接都可以读取这个。

$_ENV

答案 1 :(得分:2)

我认为客户在想要观看或打架时必须登录?为什么不使用数据库?所以你可以注册哪个,你可以看历史等等。