The Concepts : Session Handling

The session handling logic is encapsulated in the SessionHandler module extension which is added to the ActionFlow::Base class eval at the plugin initialization.

The session handler has the following responsibilities.

  • Expose the state variable, which is a hash that saves data which is relevant to the current flow state.
  • Generate state snapshots in the session hash.
  • Persist and restore each state data and make sure the state variable contains the data corresponding to the correct restored state using its unique key.

Example usage of the state variable

To store values relevant to the current flow state, simply interact with the state attribute.

 def some_step_definition
 
   state[ :key ] = :lets_put_something_in
   
 end

See the state page for more details.

Session data structure

Each flow’s session data is structured in the user’s session hash as follows.

 ----> User session hash
   |
   -----> flow data
   |  |
   |  -----> state data
   |  |
   |  -----> state data
   |  |
   |  -----> state data
   |  |
   |  -----> timestamp
   |
   -----> flow data
      |
      -----> state data
      |
      -----> state data
      |
      -----> state data
      |
      -----> timestamp

Therefore, each time a new flow is launched (which means no flow execution key was supplied), a new flow session data placeholder is created. We call it a state. After that, once the user submits a flow execution key, the correct state is fetched and written from the correct session state placeholder.

Here’s an example of the session data structure with correct values. The unique keys used here are not representative of a real world situation, since the numbers are random.

 ----> User session hash
   |
   -----> flow_data-00000001
   |  |
   |  -----> 00000(...)001
   |  |  |
   |  |  ----> last_step_name
   |  |
   |  -----> 00000(...)002
   |  |  |
   |  |  ----> last_step_name
   |  |
   |  -----> 00000(...)003
   |  |  |
   |  |  ----> last_step_name
   |  |
   |  -----> timestamp => 20070101 12:01:01.001
   |
   -----> flow_data-00000002
      |
      -----> 00000(...)001
      |  |
      |  ----> last_step_name
      |
      -----> 00000(...)002
      |  |
      |  ----> last_step_name
      |
      -----> 00000(...)003
      |  |
      |  ----> last_step_name
      |
      -----> timestamp => 20070101 13:01:01.001
Be careful when using the session hash instead of the state hash. Concurrency problems between flows may occur. Be sure you know what you’re doing.

~~DISCUSSION~~

 
session_handler.txt · Last modified: 2007/06/06 16:52 by lucboudreau
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki

Creative Commons License
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License.