Home >Backend Development >PHP Tutorial >如何使两台ECS通过memcache共享session

如何使两台ECS通过memcache共享session

WBOY
WBOYOriginal
2016-06-06 20:14:101220browse

大家好,我现在有两台阿里云ECS,都在北京区,还有一个阿里云的云数据库Memcache版。
我现在想实现共享同一域名下的session,这样我通过负载均衡随机分配到这两台服务器上,只要登录其中一台服务器即可共享登录。

然后,我是通过修改php.ini来实现把session存储到memcache上的,这些都ok了,但是现在发现一个问题是两台服务器的session并不是同步的,这是为什么呢?

服务器A:info.php

<code class="php"><?php session_start();
    $sn = session_id();
    echo $sn."\n";
    echo '<pre class="brush:php;toolbar:false">';
    var_dump($_SESSION);
    echo '</code>
'; echo "\n The A"

服务器B:info.php

<code class="php"><?php session_start();
    $sn = session_id();
    echo $sn."\n";
    echo '<pre class="brush:php;toolbar:false">';
    $_SESSION['1'] = 'abc';
    var_dump($_SESSION);
    echo '</code>
'; echo "\n The B" ?>

打印结果是:服务器A

<code>jck9tkdggk9drukfnu571hbjj5
array(0) {
}
 The A</code>

服务器B

<code>jck9tkdggk9drukfnu571hbjj5
array(1) {
  [1]=>
  string(3) "abc"
}
 The B</code>

这是为什么呢?通过memcache的命令行得知,php已经将session存入memcache了。

求解答,谢谢。

回复内容:

大家好,我现在有两台阿里云ECS,都在北京区,还有一个阿里云的云数据库Memcache版。
我现在想实现共享同一域名下的session,这样我通过负载均衡随机分配到这两台服务器上,只要登录其中一台服务器即可共享登录。

然后,我是通过修改php.ini来实现把session存储到memcache上的,这些都ok了,但是现在发现一个问题是两台服务器的session并不是同步的,这是为什么呢?

服务器A:info.php

<code class="php"><?php session_start();
    $sn = session_id();
    echo $sn."\n";
    echo '<pre class="brush:php;toolbar:false">';
    var_dump($_SESSION);
    echo '</code>
'; echo "\n The A"

服务器B:info.php

<code class="php"><?php session_start();
    $sn = session_id();
    echo $sn."\n";
    echo '<pre class="brush:php;toolbar:false">';
    $_SESSION['1'] = 'abc';
    var_dump($_SESSION);
    echo '</code>
'; echo "\n The B" ?>

打印结果是:服务器A

<code>jck9tkdggk9drukfnu571hbjj5
array(0) {
}
 The A</code>

服务器B

<code>jck9tkdggk9drukfnu571hbjj5
array(1) {
  [1]=>
  string(3) "abc"
}
 The B</code>

这是为什么呢?通过memcache的命令行得知,php已经将session存入memcache了。

求解答,谢谢。

session 跟 cookie 的关系要理清楚
前提是基于同一个域,获取相同的cookie,继而获取相同的sessionid,获取相同的session内容,共享session

你的例子中,打印的服务器A的结果中的id ,跟服务器B的结果中的id, jck9tkdggk9drukfnu571hbjj5,是相同的? 还是你修饰过例子 ?

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn