繁体   English   中英

可以在2个Apache PHP实例之间转移会话

[英]Possible to transfer session between 2 apache php instances

我有两个相同的VM,分别包含在不同IP上运行的Ubuntu 16.04,Apache 2.4和PHP 7.0.4。

在这两个VM中,我都有一个执行一些简单会话过程的脚本。

<?php
session_start();
if (!isset($_SESSION['count'])) {
  $_SESSION['count'] = 0;
} else {
  $_SESSION['count']++;
}
echo $_SESSION['count'];
?>

第一个VM每分钟由单个客户端访问一次,并且相应的计数器增加。 另一个不是。 我想以某种方式同步两台计算机的状态。

当我将从/ var / lib / php / sessions生成的文件传输到另一台机器时,我注意到计数器再次从零开始。

我仅通过从两台计算机传输文件就可以实现什么目的? 会话信息是否也保存在/ var / lib / php / sessions中包含的文件以外的文件中?

最大的问题是PHP / HTML是无状态的,一个客户端的$ _​​SESSION值对于另一个客户端将有所不同。 进行此工作的唯一方法是将$ _SESSION值保存到有状态的东西(如数据库或文件)中。 然后,将简单的REST接口添加到第一台计算机,该接口允许第二台计算机检索文件内容。 以下代码未经测试,但提供了总体思路。

    //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更新破坏的方法时,就不会在计算机之间传输会话文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM