设置并从服务器上获取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
答
我假设客户必须登录时,他想观看或打架?为什么不使用数据库?所以你可以注册哪些是开着的,你可以看历史等等。
那么你是说我应该用$ _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