【发布时间】:2011-03-26 11:08:52
【问题描述】:
我在很大程度上依赖会话来获取不同计算机的实时更新时遇到了问题。所以这是场景:
[计算机 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's) 实时更新用户页面。
这里的客户端页面假设管理员点击按钮时会获得实时更新。
客户端页面: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>";
}
所以我的问题是..它只在一台计算机上运行,所以当我打开两个浏览器(管理员和客户端)并单击按钮时,我可以看到客户端的页面是实时更新的,但是,当不同时计算机通过 LAN 访问客户端的页面,它无法在它们上运行。所以我怀疑这是因为会话只存储在我的电脑上,这就是它没有在其他电脑上工作的原因。
你认为我必须做什么?如果您能建议我一个好的但不同的解决方案,那么我很想尝试一下。
抱歉,我的问题很长。 TIA。
【问题讨论】:
标签: php jquery ajax session client-server