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

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

问题描述:

我在很大程度上依赖会话以获得实时更新到不同计算机的问题。所以这里是场景:设置并从服务器上获取PHP会话不在客户端上

[电脑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处理它并设置一个会话例如:$ _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。

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

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

$_ENV 
+0

那么你是说我应该用$ _ENV替换上面代码中的每个$ _SESSION?谢谢。 – Barry 2011-03-26 11:25:21

+0

在上面的代码中是的。只能使用$ _SESSION来处理与用户相关的变量。 $ _ENV是全局变量。 – superbly 2011-03-26 11:30:27

+0

非常感谢,一旦我的主机回来,一定会尝试这个。 – Barry 2011-03-26 11:58:59

我假设客户必须登录时,他想观看或打架?为什么不使用数据库?所以你可以注册哪些是开着的,你可以看历史等等。

+0

是的,他们必须登录,我也想过,但我期望一个交通繁忙的网站,如果我把那些分贝,我认为这会完全减慢应用程序。所以现在我正在考虑最快的解决方案。 – Barry 2011-03-26 11:44:34

+0

够公平的,如果你期望你的网站有很多流量。但知道你只存储一个战斗ID?没有别的(这与战斗有关)? – 2011-03-26 11:53:19

+0

哈哈,你有一个点,它是唯一的ID,但战斗按钮只是应用程序上的许多按钮之一,我实际上有15个不同的按钮,执行相同的过程,存储到数据库实际上是我的最后一个选择,如果有的话我完全运行解决方案:P – Barry 2011-03-26 11:58:10