簡體   English   中英

在服務器上(而不是在客戶端上)設置和獲取PHP Session

[英]Set and get PHP Session on/from the server not on the client

我在很大程度上取決於會話以獲取對不同計算機的實時更新時遇到問題。 所以這是場景:

[計算機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'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的​​客戶頁面,對它們不起作用。 因此,我懷疑是因為會話僅存儲在我的PC上,所以它無法在其他PC上喚醒。

您認為我該怎么辦? 如果您可以建議我一個好的但不同的解決方案,那么我想嘗試一下。

對不起,我的問題很長。 TIA。

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

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

$_ENV

我假設客戶要觀看或打架時必須先登錄? 為什么不使用數據庫? 因此,您可以注冊打開的內容,還可以觀看歷史記錄等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM