PHP Session不能跨服务器运行

时间:2017-06-13 05:07:21

标签: php session server session-variables session-cookies

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也不匹配。

4 个答案:

答案 0 :(得分:2)

默认情况下,会话不会在主机或服务器之间传输。如果您使用cookie来处理会话,则cookie仅发送到源服务器(简化版)。如果您移动到另一个主机/ IP,浏览器自然不会从其他主机向该站点发送任何cookie。如果他们这样做,每个人都可以获得所有帐户和登录并滥用它们。

如果要在服务器之间传输会话,则必须以某种方式连接它们。如果它们是完全独立的,您可以例如将URL中的令牌发送到第二个服务器,然后它可以用来从第一个服务器检索必要的信息。您使用的系统取决于您实际想要实现的目标。

答案 1 :(得分:2)

首先,对于默认会话行为http://php.net/manual/en/session.examples.basic.php

,这是不可能的

您可以使用其他会话处理程序session_set_save_handlermemcached

答案 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输出进行通信。

Returning JSON from a PHP Script

相关问题