From Ape Wiki

Jump to: navigation, search

Contents

[edit] APE Sessions

APE has a cool feature called sessions which allows you to make your application "persistent". When a user browses your website or reloads the page, session will restore your APE application environment.

[edit] How to enable sessions

If you are using APE JSF build, instead of using apeCore.js, use apeCoreSession.js.

If you are using APE JSF multiple file loading, add this line to your config file:

APE.Config.scripts.push(APE.Config.baseUrl + 'Core/Session.js');

[edit] How sessions work

Maybe you already noticed the number before each request sent to the APE server:

http://2.ape.ape-project.org/?
-------^

This number is called frequency. Each time the APE JSF is loaded, the frequency is incremented. This allows the APE Server to detect that the user loaded a new page.

  • If APE JSF is loaded without sessions, the frequency is only used to bypass some browser limitations.
  • If APE JSF is loaded with sessions, instead of sending a connect command when start(); is called, it asks the APE server for the user's session.

The server then sends the Multi and Uni pipes the user was connected to, so the APE JSF will fire multiPipeCreate and uniPipeCreate events.

[edit] How to save custom data in session

APE allows you to store custom data (string, array, object) in sessions with setSession() and getSession()

[edit] An example with session

This example connects a user to an APE server, joins a channel and saves a custom session named key1 with the value value1:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr" lang="en">
    <head>  
        <script type="text/javaScript" src="Clients/JavaScript.js"></script>
        <script type="text/javaScript" src="Demos/config.js"></script>
    </head>
 
    <body>
        <script type="text/javaScript">
        //Use APE JSF build with session
        APE.Config.scripts = [APE.Config.baseUrl + '/Build/uncompressed/apeCoreSession.js'];
 
        var client = new APE.Client();
 
        //Load the APE client and join the 'test' channel
        client.load({'channel':'test'});
 
        client.addEvent('load', function() {
                //core.options.restore is true if a session is active
                if (client.core.options.restore) {
                    //Calling start(); without arguments will ask the APE Server for a user session
                    client.core.start();
                } else {
                    //It's not a session restoration, ask user for his name
                    client.core.start({'name':prompt('name?')});
                }
        });
 
        client.addEvent('ready', function() {
            if (client.core.options.restore) {
                //If it's a session restoration, ask the APE server for the custom session 'key1'
                client.core.getSession('key1', function(resp) {
                    console.log('Receiving sessions data. key1 value is : ', resp.data.sessions.key1);
                });
            } else {
                //Saving custom session key1 one the server
                console.log('saving custom session data, key1 on the server');
                client.core.setSession({'key1':'value1'});
            }
        });
 
        client.addEvent('multiPipeCreate', function(pipe) {
                console.log('New pipe ' + pipe.name);
        });
        </script> 
    </body>
</html>