用于处理多个服务器的PHP会话

时间:2010-08-13 21:45:09

标签: php mysql zend-framework session

所有

我有一个用Zend Framework和MVC编写的PHP5 Web应用程序。此应用程序安装在具有相同设置的2台服务器上。服务器X有php5 / MySql / Apache和Server Y也一样。我们在两台服务器之间没有通用的数据库服务器。

我的应用程序在通过服务器X和服务器Y上的https单独访问时可以正常工作。但是当我们启用负载平衡并同时启用两个服务器时,会话就会丢失。

如何确保我的会话在服务器之间保持不变?我应该在第三台服务器上维护我的数据库并写入会话吗?如果是这样,最简单,最安全的方法是什么?

由于

3 个答案:

答案 0 :(得分:7)

memcached是解决此问题的常用方法。你只需要启动并运行(简单)并更新你的php.ini文件,告诉它使用memcached作为会话存储。

在php.ini中你会修改:

session.save_handler = memcache
session.save_path = ""

总体思路:PHP Sessions in Memcached

有许多关于设置Zend会话处理程序以使用memcached的教程。随便挑选。

答案 1 :(得分:0)

  

我应该维持我的数据库三分之一   服务器和写会话?

是的,处理它的一种方法是让第三台机器运行数据库,这两台Web服务器都用于该应用程序。我过去曾为几个项目做过这样的事情并且运作良好。这种方法的问题是......是Web服务器或数据库的瓶颈。如果它在数据库中,通过将Web服务器的负载平衡放入混合中,您将看不到多少改进。您可能需要考虑数据库的镜像方案。

答案 2 :(得分:0)

另一种选择是在负载均衡器上使用粘性会话功能。这将使用户保持在某些服务器上。因此,当用户1访问该站点时,他们将被定向到服务器X.每个后续请求也将被定向到服务器X.这使您不必担心服务器之间的持久会话,因为每个用户将继续被定向到服务器上有他们的会话。

这样做的一个缺点是,当您将Web服务器从池中取出时,会话的一半用户将被注销。因此,此解决方案的有效性取决于您将服务器从池中取出的频率。

相关问题