[英]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.