PHP会话变量不跨服务器传输。这是一个简单的例子,我用来检查它是否有效。请看一下。
file1.php
<?php
session_start();
$_SESSION['FirstName'] = Kshitij ;
$_SESSION['LastName'] = Kawatra ;
echo session_id();
echo "<p>First Name is: " . $_SESSION['FirstName'] . "</p>" ;
echo "<p>Last Name is: " . $_SESSION['LastName'] . "</p>" ;
?>
<p>Go to the <a href="https://<server-ip>/file2.php">next page</a>.</p>
file2.php(在不同的服务器上)
<?php
session_start();
echo session_id();
echo "<p>The FirstName session variable is: " . $_SESSION['FirstName'] . "</p>";
echo "<p>The LastName session variable is: " . $_SESSION['LastName']. "</p> ";
?>
即使会话ID也不匹配。
答案 0 :(得分:2)
默认情况下,会话不会在主机或服务器之间传输。如果您使用cookie来处理会话,则cookie仅发送到源服务器(简化版)。如果您移动到另一个主机/ IP,浏览器自然不会从其他主机向该站点发送任何cookie。如果他们这样做,每个人都可以获得所有帐户和登录并滥用它们。
如果要在服务器之间传输会话,则必须以某种方式连接它们。如果它们是完全独立的,您可以例如将URL中的令牌发送到第二个服务器,然后它可以用来从第一个服务器检索必要的信息。您使用的系统取决于您实际想要实现的目标。
答案 1 :(得分:2)
首先,对于默认会话行为http://php.net/manual/en/session.examples.basic.php
,这是不可能的您可以使用其他会话处理程序session_set_save_handler或memcached
答案 2 :(得分:2)
默认情况下,PHP会话是一台服务器的本地会话。您无法直接在多台服务器上使用它。
如果你想这样做,你将不得不使用另一个会话处理程序。
请在此处参阅更多详情:How to manage a single PHP5 session on multiple apache servers?
答案 3 :(得分:2)
有多种方法可以在服务器之间进行通信,但Session不是一种。 PHP Session实际上是一个内存空间,会话的生命周期由不同的可能方式刷新,这个内存只是服务器端,只有运行PHP代码的服务器。
最好的方法,但最难的方法是在这两个服务器之间创建一个套接字,并通过这两个服务器之间的安全层进行通信。
http://php.net/manual/en/function.socket-create.php
最简单的方法是创建一个REST API并通过它与来自html查询字符串的JSON输出进行通信。