我在依赖会话方面遇到问题,无法对不同的计算机进行实时更新。所以这是场景:
[电脑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。
答案 0 :(得分:2)
我认为您不能使用会话来解决此问题,因为每个用户(连接)都会获得另一个会话,并且无法从管理会话中获取数据。
您可以使用环境变量。每个连接都可以读取这个。
$_ENV
答案 1 :(得分:2)
我认为客户在想要观看或打架时必须登录?为什么不使用数据库?所以你可以注册哪个,你可以看历史等等。