2016-07-11 10 views
0

Ubuntu 16.04、Apache 2.4、およびPHP 7.0.4が異なるIPで実行されている2つの同一のVMがあります。2つのApacheのPHPインスタンス間でセッションを転送することが可能

どちらのVMでも、簡単なセッション手順を実行するスクリプトがあります。

最初のVMは1分ごとに1つのクライアントからアクセスされ、対応するカウンタが増加します。もう一つはそうではありません。私はどうにかして2台のマシンの状態を同期させたいと思います。

私は/ var/lib/php/sessionsから生成されたファイルを他のマシンに転送すると、カウンタが再びゼロから始まることに気付きました。

私は2台のマシンからファイルを転送するだけで何を達成しようとしていますか?セッション情報は、/ var/lib/php/sessionsに含まれているファイル以外のファイルにも保存されていますか?

+0

今、同期の問題があります。あなたは思っています - セッション。私はセッションが共有されていないクッキーにユニークであることを知っています。だから、それらを一人のままにしておいてください。 1)データベーステーブル。絶対に信頼できる安全。 1つのプロセスからテーブルに共有する情報を入れてください。他のプロセスはそれをロードし、それが望むことをします。 100%の信頼性と安全性と柔軟性。だから、セッションやクッキーと戦う?どうして?何も思いつきません。 –

+0

@RyanVincentデータを転送する2つのサーバー間のソケット接続はどうですか? –

+0

@RyanVincent私の目標は、VM1で動作しているApacheをVM2に完全に移行できるようにすることです。私はファイルシステムとメモリを転送することができます(CRIUツールを使用して)。しかし、セッションを持続させたいときには、クッキー/セッションクッキーを転送する必要があることがわかります。そうですが、何らかの理由で失敗します。 –

答えて

0

これの最大の問題は、ステートレスなPHP/HTMLです.1つのクライアントの$ _SESSION値は、別のクライアントのために異なります。この作業を行う唯一の方法は、$ _SESSION値をステートフルなデータベースやファイルのようなものに保存することです。次に、最初のマシンに単純なRESTインターフェースを追加し、2番目のマシンがファイルの内容を取り出せるようにします。以下のコードはテストされていませんが、一般的な考え方を示しています。

//Machine 1 
    <?php 
    $secret_key = 'secret123'; //Same on both machines, make this a long string of random charecters 

    session_start(); 
    if (!isset($_SESSION['count'])) { 
     $_SESSION['count'] = 0; 
    } else { 
     $_SESSION['count']++; 
    } 

    //Write the count value to a file 
    $countFile = fopen('count.txt','w'); 
    fwrite($countFile,$_SESSION['count']); 
    fclose($countFile); 



    //Handle requests from machine 2 
    if(isset($_GET['request_count'])) { 
     if($_GET['request_count'] == $secret_key) { 
      echo file_get_contents('count.txt'); 
      exit; 
     } 
    } 

    echo $_SESSION['count']; 
    ?> 

    //Machine 2 
    <?php 
    $secret_key = 'secret123'; 
    $machine_1_URL = 'localhost'; 

    //Init curl 
    $ch = curl_init(); 
    curl_setopt_array($ch, array(
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_URL => $machine1URL . "/?request_count=" . $secret_key 
    )); 

    //Get the data from machine 1 
    echo curl_exec($ch); 

    //Alternatively you can set the value like this: 
    $_SESSION['count'] = intval(curl_exec($ch)); 
    ?> 

は私があなたの代わりにPHPのアップデートによって破壊されるかもしれない何かのよくテストされ、周知の方法を使用することができますマシン間でセッションファイルを転送するビジネスに取得しません。

関連する問題