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

lea*_*ner 13 php apache session multiserver

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

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

Art*_*cto 13

您将不得不使用另一个会话处理程序.

您可以:

  • memcached似乎有更少的问题,更稳定 (2认同)

reg*_*ero 10

作为所有这些答案的补充:

如果你在数据库中存储会话,检查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部分,您有多种解决方案,从OpenIdCAS,以及其他.如果数据在客户端(ajax,ESI-gate)合并,那么您实际上并不需要在服务器端存储公共会话数据.这将避免您的5个受影响的Web应用程序中的3个同时在共享会话中写入数据.其他会话共享技术(数据库,NFS,甚至是memcached)主要用于在多个服务器之间共享数据,因为负载平衡工具可以将您的顺序HTTP请求从一个服务器发送到另一个服务器,但如果您真的意味着并行收集数据,那么您应该真的研究SSO.


chi*_*org 7

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

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


Bjo*_*orn 5

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


tuc*_*uxi 5

将其存储在数据库中 - 让所有服务器连接到同一个数据库.对于"第一个结果数据库PHP存储会话 "