我在很大程度上依賴會話以獲得實時更新到不同計算機的問題。所以這裏是場景:設置並從服務器上獲取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替換上面代碼中的每個$ _SESSION?謝謝。 – Barry 2011-03-26 11:25:21
在上面的代碼中是的。只能使用$ _SESSION來處理與用戶相關的變量。 $ _ENV是全局變量。 – superbly 2011-03-26 11:30:27
非常感謝,一旦我的主機回來,一定會嘗試這個。 – Barry 2011-03-26 11:58:59