duanfaxin7014
2013-04-23 11:40
浏览 93
已采纳

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

I have been working on a webApp which should be able to perform tasks only by using AJAX. It seems to work pretty good, but I am running into a problem, because I do not store Session variables on the public site.

My login procedure is similar to iCloud's. You arrive to one page asking for a login. Your login is sent to a server using AJAX and returns a true or false. If true, the login box disappears and you are ready to work with the applications.

enter image description here

When you Are looking at the image above, you shall see the two green boxes as the exact same site, without any URL refreshes or anything. It is simply the same page.

The Pink boxes represents Apache Servers that hasn't registered any Sessions. My Session Class has been builded using the session_set_save_handler idea.

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

I can't seem to figure out a way for the public site to ask for data on the pink servers without a Session ID. Could anybody tell me the idea behind the session_set_save_handler idea as if I was 6 years old? I have read the PHP manual for details, but it really confuses me.

If anybody knows about how this communication method could work properly, please tell me. All of the Apache Servers are connected through a LAN network, and are able to communicate. Also they all have access to the same Session Class in an Apache include Library.

图片转代码服务由CSDN问答提供 功能建议

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

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

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

粉红色框表示尚未注册任何 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的服务器。 有人能告诉我 session_set_save_handler 这个想法背后的想法,好像我6岁了吗? 我已阅读PHP手册了解详细信息,但它确实让我感到困惑。

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dtpoius74857 2013-09-04 14:31
    已采纳

    It appears the problem you are having can be solved using distributed sessions.

    Using memcached you can provide a central point for all session data that any connected server can share.

    If you are using linux, the below code demonstrates how commenting out local file session handling, and replacing it with memcache can allow you to share session data.

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

    For an in depth explanation visit: http://bakery.cakephp.org/articles/rynop/2010/09/10/using-memcached-to-run-your-sessions

    点赞 打赏 评论

相关推荐 更多相似问题