在工作中我们几乎用Java和perl做所有事情,但我想用PHP和会话构建一个功能。一些人认为尝试在我们的系统上进行PHP会话是一个坏主意,因为它会分发给许多服务器。具体问题是什么?
答案 0 :(得分:10)
您还可以使用自定义会话保存处理程序:
http://www.php.net/manual/en/function.session-set-save-handler.php
我还没有尝试过,但有了它,你就可以定义自己的保存/读取功能,这样就可以实现数据库或共享的nfs后端而无需安装任何扩展。
同样是由@Eran Galperin提出的Msession,看起来非常有趣,可以替代我之前提到的那个。
答案 1 :(得分:4)
跨多个服务器持久化会话(也称为会话群集)是扩展Web应用程序的常见问题,并非特定于PHP。 PHP确实提供了几种解决方案来处理它,例如Zend Platform(商业应用程序服务器)和Msession(扩展名)。
答案 2 :(得分:4)
您的具体问题的答案,问题是什么,在于默认情况下,PHP将其会话存储在文件系统上的文件中。对于提供请求的单个Web服务器,这不是问题,因为您的会话数据始终可用。但是,如果您有两个负载均衡的Web服务器来处理请求呢?
想象一下,使用请求命中第一个Web服务器,该请求会在其文件系统上创建会话文件。然后,您的下一个请求将访问第二个Web服务器。第二个Web服务器当然不会看到会话文件。对于用户,您可以登录网站,然后突然登出。
这不是PHP特有的问题,而且很常见。解决方案是将会话数据存储在某个公共区域中。最常见的方法是将会话数据存储在可供所有Web服务器访问的数据库中,或存储在某些共享内存缓存服务器(如memcached)中。
答案 3 :(得分:0)
相当模糊的问题,但我会说问题比答案中提到的要大。当然,你可以覆盖加载和保存cookie的方式,但它也有成本。例如,您必须考虑以下方案/问题:
答案 4 :(得分:0)
最简单的是memcached或redis。
以下是如何在redis中执行此操作 - 我们现在正在使用它: http://redis4you.com/articles.php?id=001&name=Redis+as+session+handler+in+PHP