2011-03-26 65 views
0

我在很大程度上依賴會話以獲得實時更新到不同計算機的問題。所以這裏是場景:設置並從服務器上獲取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。

回答

2

我認爲你不能使用會話來解決這個問題,因爲每個用戶(連接)都會獲得另一個會話,並且無法從管理會話獲取數據。

您可以使用環境變量。每個連接都可以讀取這一個。

$_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

2

我假設客戶必須登錄時,他想觀看或打架?爲什麼不使用數據庫?所以你可以註冊哪些是開着的,你可以看歷史等等。

+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

相關問題