Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using of Session Database on multiple Apache Servers

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.

like image 632
Corfitz. Avatar asked Nov 02 '22 23:11

Corfitz.


1 Answers

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

like image 86
Steve Papa Avatar answered Nov 10 '22 13:11

Steve Papa