php - 在多个 Apache 服务器上使用 session 数据库

标签 php database apache class session

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

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

enter image description here

当您查看上图时,您会看到两个绿色框是完全相同的站点,没有任何 URL 刷新或任何其他内容。这只是同一个页面。

粉红色框表示尚未注册任何 session 的 Apache 服务器。我的 session 类是使用 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')
     );

我似乎想不出一种方法让公共(public)站点在没有 session ID 的情况下在 pink 服务器上请求数据。谁能告诉我 session_set_save_handler 想法背后的想法,就好像我 6 岁一样?我已经阅读了 PHP 手册以获取详细信息,但它确实让我感到困惑。

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

最佳答案

看来您遇到的问题可以使用分布式 session 来解决。

使用 memcached,您可以为所有连接的服务器可以共享的所有 session 数据提供一个中心点。

如果您使用的是 Linux,下面的代码演示了如何注释掉本地文件 session 处理并将其替换为内存缓存可以让您共享 session 数据。

  ~$ 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

关于php - 在多个 Apache 服务器上使用 session 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16168437/

相关文章:

php - Composer 自动加载出现问题 : not loading all files

php - 与 oauth 2 链接的 AWS Alexa 技能

mysql - 向 MySQL 中的关系添加新记录

database - 如何为 Windows Phone 8 移动应用程序创建持久数据库

apache - mod_rewrite 和 HTTP 基本身份验证

regex - 删除 .htaccess 中的 GET 参数

javascript - Ajax调用后url中的data-id没有改变

php - MySQL 获取两个用户之间的对话

sql - 在连续的 Postgresql 行中查找数据模式

xml - 如何在Spring XML中为Apache Camel的FlexibleAggregationStrategy设置“选择”表达式?