如何在多个Apache服务器上管理单个PHP5会话?

时间:2011-06-27 09:26:00

标签: php apache session multiserver

您好我必须从多个Web服务器检索数据。首先,我以用户身份登录我的网站。成功登录后,我必须从不同的Web服务器获取数据并显示。如何与多个服务器共享一个会话。我怎样才能做到这一点?

首次登录时,创建保存在该服务器临时文件夹中的会话和会话ID。当我尝试访问另一台服务器时,如何使用我登录时已创建的当前会话。有人可以建议解决方案吗?

5 个答案:

答案 0 :(得分:13)

你必须使用另一个会话处理程序。

你可以:

答案 1 :(得分:9)

补充所有这些答案:

如果您在数据库中存储会话,请检查真正激活PHP中会话的垃圾收集(在类似Debian的发行版中不是这样,他们决定使用自己的cron进行垃圾回放并更改php.ini使它永远不会启动任何gc,所以检查session.gc_probabilitysession.gc_divisor)。数据库中sessionstorage的主要问题是它意味着很多写入查询和数据库中的大量冲突访问。这是强调像MySQL这样的数据库服务器的好方法。因此,使用其他解决方案的恕我直言更好,这可以使您的读/写比率保持更好的网络数据库方式。

您还可以保留文件存储系统,只需在 NFS 的服务器之间共享文件目录。更改session.save_path设置以使用/tmp以外的内容。但根据定义,NFS并不是使用磁盘的最快速度。首选memcached或mongodb以便快速访问。

如果您需要在服务器之间共享的唯一内容是身份验证,那么您可以共享身份验证凭据,而不是共享真实会话存储。与SO中的OpenId系统一样,我们称之为SSO,对于Web部分,您有多种解决方案,从 OpenId CAS 等。如果数据在客户端(ajax,ESI-gate)合并,那么您实际上并不需要在服务器端存储公共会话数据。这将避免您的5个受影响的Web应用程序中的3个同时在共享会话中写入数据。其他会话共享技术(数据库,NFS,甚至是memcached)主要用于在多个服务器之间共享数据,因为负载平衡工具可以将您的顺序HTTP请求从一个服务器发送到另一个服务器,但如果您真的意味着并行收集数据,那么您应该真的研究SSO。

答案 2 :(得分:7)

另一种选择是使用memcached来存储会话。

重要的是你必须有一个共享资源 - 无论是SQL数据库,memcached,NoSQL数据库等,所有服务器都可以访问。然后使用session_set_save_handler访问共享资源。

答案 3 :(得分:5)

将会话存储在可从整个服务器池访问的数据库中。

答案 4 :(得分:5)

将其存储在数据库中 - 让所有服务器连接到同一个数据库。 “php store session in database

的第一个结果