5

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

我的登录过程类似于 iCloud 的。您到达一个要求登录的页面。您的登录信息使用 AJAX 发送到服务器并返回一个truefalse。如果为真,登录框会消失,您就可以使用应用程序了。

在此处输入图像描述

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

粉红色框代表尚未注册任何Sessions. 我的会话类是使用这个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')
     );

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

如果有人知道这种通信方法如何正常工作,请告诉我。所有的 Apache 服务器都通过 LAN 网络连接,并且能够通信。他们也都可以访问Session ClassApache 包含库中的相同内容。

4

1 回答 1

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

于 2013-09-04T14:31:14.787 回答