
# How to register session data?

It is very easy to register session data using *Eliom references*. Just create an Eliom reference of *scope* session and its value will be different for each session (one session \= one browser process).

But most of the time, what we want is to store data for one user, not for one browser instance. To do that, we group all the sessions for one user together, by creating a group of sessions. The name of the group may be for example the user id.

To create a session group, open the session by doing something like:

```ocaml
let open_session login password =
  let%lwt b = check_password login password in
  if b
  then Eliom_state.set_volatile_data_session_group
      ~scope:Eliom_common.default_session_scope
      (Int64.to_string (get_userid login))
  else ...

```
If you want to store user data, just create a global Eliom reference of scope group:

```ocaml

let myref =
  Eliom_reference.Volatile.eref
    ~scope:Eliom_common.default_group_scope
    None

```
And during a request, set this reference:

```ocaml

  ...
  Eliom_reference.Volatile.set myref (Some "user data")

```
The value of this reference is different for each user:

```ocaml

  Eliom_reference.Volatile.get myref

```
It is possible to create *persistent* Eliom references (see module `Eliom_reference`).


## Other scopes

If you want to store server side data for one browser (one session), use scope `Eliom_common.default_session_scope`.

If you want to store server side data for one tab of your browser (one client process), use scope `Eliom_common.default_process_scope` (available only if you have a client-server Eliom application).

If you want to store server side data during one request, use scope `Eliom_common.request_scope`.


## Persistent references

Module `Eliom_reference` also defines an interface for persistent references, that will survive if you restart the server.


## Links

- `More information on session data`
- module `Eliom_reference`