在多个Apache服务器上使用会话数据库

时间:2013-04-23 11:40:28

标签: php database apache class session

我一直致力于webApp,它应该只能通过使用AJAX来执行任务。它似乎工作得很好,但我遇到了问题,因为我没有在公共站点上存储Session个变量。

我的登录程序与iCloud类似。您到达一页要求登录。您的登录使用AJAX发送到服务器并返回truefalse。如果为true,则登录框将消失,您已准备好使用应用程序。

enter image description here

当您查看上面的图片时,您将看到两个绿色框作为完全相同的网站,没有任何URL刷新或任何东西。它只是同一页。

Pink框表示尚未注册任何Sessions的Apache服务器。我的会话类已使用session_set_save_handler想法构建。

session_set_save_handler(
         array($this, 'open'),
         array($this, 'close'),
         array($this, 'read'),
         array($this, 'write'),
         array($this, 'destroy'),
         array($this, 'gc')
     );

我似乎无法找到公共网站在没有会话ID的情况下在pink服务器上请求数据的方法。有人能告诉我session_set_save_handler想法背后的想法,好像我6岁了吗?我已阅读PHP手册了解详细信息,但它确实让我感到困惑。

如果有人知道这种沟通方法如何正常运作,请告诉我。所有Apache服务器都通过LAN网络连接,并且能够进行通信。此外,他们都可以访问Apache include Library中的相同Session Class

1 个答案:

答案 0 :(得分:2)

使用分布式会话可以解决您遇到的问题。

使用memcached,您可以为任何连接的服务器可以共享的所有会话数据提供中心点。

如果您使用的是linux,下面的代码演示了如何注释掉本地文件会话处理,并用memcache替换它可以让您共享会话数据。

  ~$ cat /etc/php5/apache2/php.ini | grep -i session 
  [Session] 
  ;session.save_handler = files 
  session.save_handler = memcache 
  session.save_path = "tcp://127.0.0.1:11211"

如需深入解释,请访问:http://bakery.cakephp.org/articles/rynop/2010/09/10/using-memcached-to-run-your-sessions