Yii会话在多服务器中不起作用

时间:2013-09-05 04:52:31

标签: session yii

我有1个负载平衡服务器和2个Web服务器:Server1和Server2。它们都与DB Server连接。 我的问题: 我正在使用Yii会话来控制会话。 在我成功登录Server1后,loadbalancing服务器重定向到Server 2 =>它不会保留我之前登录的会话(server1)

如何在Server2中保留会话

2 个答案:

答案 0 :(得分:4)

您有几个选择:

1)如果您的负载均衡器支持它,您可以启用会话持久性,以便始终将用户发送到与他们最初命中的服务器相同的服务器。这样做的好处是,如果您不想更改任何代码,则可以轻松设置。缺点是,如果您的某个服务器出现故障,您将丢失该节点上的所有会话。

2)在node1和node2之间设置共享内存缓存(不是memcached)会话。相关设置为。

的php.ini

session.save_handler memcache
session.save_path tcp://<ip1>, tcp://<ip2>

memcache.ini

memcache.allow_failover 1
memcache.default_port   11211
memcache.hash_strategy  standard
memcache.max_failover_attempts  20

设置起来有点棘手,但是一旦你开始工作,你就可以在两台服务器之间实现完全冗余。如果有人下台的话。

3)设置第三个节点来管理会话并将php session.save_path配置为该服务器的ip。这样做的好处是会话现在由第三台服务器管理。缺点是你失去了冗余,如果服务器出现故障,你会失去会话。

答案 1 :(得分:2)

除了查尔斯的评论之外还有其他一些想法。

1)您可以使用CDbHttpSession而不是单独获取memcached服务器设置。这会将您的会话存储在Web服务器后面的数据库服务器中。

2)您的服务器是否启用了Suhosin?如果这样做,它将导致许多令人头疼,因为Suhosin会加密您的会话变量(并且会在每台服务器上以不同方式执行),导致您的会话不在服务器之间共享。

祝你好运,如果你拥有它们,可以回答更多问题。当我们处理错误时,转移到负载平衡器花了我们一段时间。