PHP将其会话信息存储在建立该会话的服务器主机的文件系统上。 在多主机PHP环境中,负载在每个主机之间智能分配,PHP会话变量不适用于每个请求(除非偶然将请求分配给同一主机-假设我们无法控制负载均衡器) 。

这个被称为“ PHP负载平衡旅行者指南”的网站建议重写PHP会话处理程序并将会话信息存储在共享数据库中。

在您看来,在多PHP主机环境中维护会话信息的最佳方法是什么?

更新:感谢您的宝贵反馈。 对于寻找示例代码的任何人,我们都找到了一个有用的教程,关于为MySQL编写会话管理器类 ,我建议您检出该类

===============>>#1 票数:15 已采纳

数据库或数据库+缓存。 一般而言,会议不应该经常写。 从数据库解决方案开始,该解决方案仅在会话数据已更改时才写入db。 以后应添加Memcache,以提高性能。 数据库解决方案将非常快,因为您只需要查找主键。 确保数据库具有行锁定,而不具有表锁定(myISAM)。 MemCache仅是一个坏主意...如果它溢出,崩溃或重新启动,则用户将被注销。

===============>>#2 票数:2

无论您做什么,都不要将其存储在服务器本身上(即使您仅使用一台服务器,或处于1 + 1故障转移方案中)。 这会让你死胡同。

我想说,使用Database + Memcache进行存储/检索,这会让您脱离Zend的掌握(并且相信Zend在某些​​时候确实会导致故障)。 由于即使使用MySQL,您也可以通过UserID或SessionID轻松进行分区,因此可以扩展。

(编辑:此外,使用DB + Memcache不会将您绑定到商业聚会,也不会将您绑定到PHP -您可能对此感到高兴)

===============>>#3 票数:1

将会话数据存储在共享数据库中是可行的,但可能会很慢。 如果这是一个非常大的站点,则内存缓存可能是一个更好的选择。

===============>>#4 票数:1

根据项目的预算,您还可以考虑将Zend Platform用于生产机器,它除了具有许多其他出色功能之外,还包括可配置的会话群集,其工作方式类似于CDN。

  ask by Simon Young translate from so

未解决问题?本站智能推荐:

1回复

如何使用同一域的memcached在多个服务器之间共享php会话

我有三个服务器用于单个域 我正在使用nginx作为负载均衡器。 我想在这些服务器之间共享php会话。 我的应用程序严重依赖会话。 将会话存储在文件中不是一个好主意。 我为此使用memcached。 我应该如何准确,有效地配置memcached以读取和写入会话以及在服务
1回复

PHP中的自定义会话处理程序

编写自定义会话处理程序时应遵循的最佳实践是什么? 我已经遍历了大多数现有的PHP框架,并且在处理会话ID更新时,它们中的大多数似乎在并发和多个ajax请求方面存在问题。 默认的PHP会话使用文件锁来管理此操作,但是如果我使用mysql存储会话,似乎没有合适的方法来执行此操作。 解决此问题的
4回复

替换PHP会话

我有一个从事至少两年工作的社交网络类型应用程序,我需要对其进行良好的扩展,因此我在优化此应用程序的代码方面投入了大量精力。 当用户登录网站时,我经常使用会话来缓存用户的数据库结果。我在其中将用户ID号,用户名,您的状态/角色,照片URL,在线状态,上次活动时间以及其他几项内容缓存到会话变量中。
2回复

mySQL和memcached用于PHP会话?

对于高流量网站,我们计划扩展以在HA设置中使用2个Web服务器。 我们需要解决的一个问题是PHP会话的管理。 显而易见的答案是将会话处理移动到DB这很容易,并且示例代码在互联网上广泛可用。 另一方面,我们知道memcached的好处,但是一旦memcached节点失败,该节点上
1回复

在PHP中的多个服务器上进行了Memcahced

关于PHP中的memcached模块,我有以下问题: 介绍: 我们正在使用该模块,以防止将相同的查询发送到每个时刻有500多个用户的站点上的数据库服务器。 有时(非常罕见),已终止处理的进程,并且所有活动用户都开始对数据库生成查询,因此一切都停止了工作。 题: 我知
1回复

PHP的最佳会话save_handler是什么,为什么? [关闭]

有许多方法可以用PHP保存会话。 将它们保存到文件中存在一些问题-例如,这不是可扩展的解决方案。 用PHP存储会话的最佳方法是什么? 我发现将工作会话保存到SQLite中非常容易,SQLite至少比数千个文件更紧凑,但是似乎没有多少人这样做。 为什么? 他们不知道,没关系,还是没有比文
1回复

PHP-Memcached-会话处理

因此,我需要将会话处理从基于文件(默认)更改为基于缓存,因此,当我向集群添加节点时,集群中的任何应用程序节点都可以访问会话数据。 我的经验一直是使用配置文件(在我的情况下为cache.yml)集中缓存节点。 通过此文件,我确定了3个缓存服务器(vc-1,vc-2,vc3)。 如果我错了
2回复

用于会话存储的Memcached或MySQL - PHP

使用Memcached与PHP进行会话存储是个好主意吗? 我们将拥有大量服务器,我们必须从任何地方访问会话数据,因此我们被迫使用数据库(在我们的情况下将是MySQL)作为会话存储或Memcached。 你怎么看?
1回复

由Memcached处理的PHP会话仍在磁盘上

我们在Nginx下设置了PHP5 FPM。 我们使用Memcached作为会话处理程序。 我的期望是,所有会话都应成功地转移到Memcached中,并且明确地不使用磁盘,以确保不失败(尽管发生了一些致命的错误,例如Memcached服务器的死亡)。 但是,在检查我们的应用程序后,
1回复

无法使PHP使用memcached和Unix套接字处理其会话

服务器操作系统: Ubuntu 12.04.5 LTS 的PHP: 5.3.10-1ubuntu3.15 Memcached: 1.4.22 (自行编译) 使用以下配置作为服务运行的Memcached: / usr / local / bin / memcached -v -m