Warning: Reason support is experimental. We are looking for beta-tester and contributors.

Module Eliom_sessions

module Eliom_sessions: sig..end

This module contains the functions you need to get (or set) information about the request or the session.



There are three kinds of sessions, all using different cookies:* service sessions (used to register services in a table of session),

  • volatile data sessions (used to save session data in tables in memory),
  • persistent sessions (used to save session data on hard disk).

For all these sessions, you may set a timeout (global or individual for one user) or set an expiration date for the cookie. "Volatile" denotes both service and in memory data sessions.

Be very carefull if you use several sessions concurrently, as they may have different duration (one may be closed while the other are not). Duration of service sessions is sometimes shorter than volatile data sessions, which is usually shorter than persistent sessions.

If you want several sessions of the same type for one site, you can choose a personalized session name by giving the optional parameter ?session_name.

It is highly recommended to put all the sessions for one user in one session group. Thus, it will be possible to implement features like "close all opened sessions" for one user, or limitation of the number of sessions one user can open concurrently, or setting data for one group of sessions.

The default duration of session may be set in Ocsigen's configuration file, as options for the Eliom module. Each Eliom site can override these options using functions of this module.

Setting sessions timeout in the configuration file. Example: <extension findlib-package="ocsigen.ext.eliom"> <datatimeout value="3600"> (* in memory data sessions *) <persistenttimeout value="infinity"> (* persistent session data *) <servicetimeout value="3600"> (* session services *) <volatiletimeout value="3600"> (* both session services and in memory data sessions *) </extension>

Getting information about the request


type server_params

val get_user_agent : sp:server_params -> string

returns the name of the user agent that did the request (usually the name of the browser).

val get_full_url : sp:server_params -> string

returns the full URL as a string

val get_remote_ip : sp:server_params -> string

returns the internet address of the client as a string

val get_remote_inet_addr : sp:server_params -> Unix.inet_addr

returns the internet address of the client, using the type Unix.inet_addr (defined in OCaml's standard library).

val get_current_full_path_string : sp:server_params -> string

returns the full path of the URL as a string.

val get_current_full_path : sp:server_params -> Ocsigen_lib.url_path

returns the full path of the URL using the type Ocsigen_lib.url_path

val get_original_full_path_string : sp:server_params -> string

returns the full path of the URL as first sent by the browser (not changed by previous extensions like rewritemod)

val get_original_full_path : sp:server_params -> Ocsigen_lib.url_path

returns the full path of the URL as first sent by the browser (not changed by previous extensions like rewritemod)

val get_current_sub_path_string : sp:server_params -> string

returns the sub path of the URL as a string. The sub-path is the full path without the path of the site (set in the configuration file).

val get_current_sub_path : sp:server_params -> Ocsigen_lib.url_path

returns the sub path of the URL using the type Ocsigen_lib.url_path. The sub-path is the full path without the path of the site (set in the configuration file).

val get_header_hostname : sp:server_params -> string option

returns the hostname that has been sent by the user agent. For HTTP/1.0, the Host field is not mandatory in the request.

val get_default_hostname : sp:server_params -> string

returns the hostname declared in the config file (<host defaulthostname="...">).

val get_hostname : sp:server_params -> string

returns the hostname used for absolute links. It is either the Host header sent by the browser or the default hostname set in the configuration file, depending on server configuration (<usedefaulthostname/> option).

val get_default_port : sp:server_params -> int

returns the port number declared in the config file (<host defaulthttpport="...">).

val get_default_sslport : sp:server_params -> int

returns the https port number declared in the config file (<host defaulthttpsport="...">).

val get_server_port : sp:server_params -> int

returns the port of the server. It is either the default port in the configuration file, or the port in the Host header of the request, or the port on which the request has been done.

val get_ssl : sp:server_params -> bool

returns true if https is used, false if http.

val get_suffix : sp:server_params -> Ocsigen_lib.url_path option

returns the suffix of the current URL

val get_cookies : sp:server_params -> string Ocsigen_lib.String_Table.t

returns the cookies sent by the browser


Getting and setting information about the current session



Global configuration of session timeouts



The following functions set the timeout for sessions, for the different kinds of session. The sessions will be closed after this amount of time of inactivity from the user. None means no timeout.

The optional parameter ?recompute_expdates is false by default. If you set it to true, the expiration dates for all sessions in the table will be recomputed with the new timeout. That is, the difference between the new timeout and the old one will be added to their expiration dates (by another Lwt thread). Sessions whose timeout has been set individually with Eliom_sessions.set_volatile_session_timeout won't be affected.

If ~session_name is not present, it is the default for all session names, and in that case recompute_expdates is ignored. ~session_name:None means the default session name.

If ~override_configfile is true (default (false), then the function will set the timeout even if it has been modified in the configuration file. It means that by default, these functions have no effect if there is a value in the configuration file. This gives the ability to override the values choosen by the module in the configuration file. Use ~override_configfile:true for example if your Eliom module wants to change the values afterwards (for example in the site configuration Web interface).

Warning: If you use one of these functions after the initialisation phase, you must give the ~sp parameter, otherwise it will raise the exception Eliom_common.Eliom_function_forbidden_outside_site_loading. This remark also applies to get_* functions.

val set_global_volatile_session_timeout :
   ?session_name:string option ->
    ?sp:server_params ->
    ?recompute_expdates:bool -> ?override_configfile:bool -> float option -> unit

Sets the timeout for volatile (= "in memory") sessions (both service session and volatile data session) (server side).

val set_global_service_session_timeout :
   ?session_name:string option ->
    ?sp:server_params ->
    ?recompute_expdates:bool -> ?override_configfile:bool -> float option -> unit

Sets the timeout for service sessions (server side).

val set_global_volatile_data_session_timeout :
   ?session_name:string option ->
    ?sp:server_params ->
    ?recompute_expdates:bool -> ?override_configfile:bool -> float option -> unit

Sets the timeout for volatile (= "in memory") data sessions (server side).

val set_global_persistent_data_session_timeout :
   ?session_name:string option ->
    ?sp:server_params ->
    ?recompute_expdates:bool -> ?override_configfile:bool -> float option -> unit

Sets the timeout for persistent sessions (server side).

val get_global_service_session_timeout :
   ?session_name:string ->
    ?sp:server_params -> unit -> float option

Returns the timeout for service sessions (server side).

val get_global_volatile_data_session_timeout :
   ?session_name:string ->
    ?sp:server_params -> unit -> float option

Returns the timeout for "volatile data" sessions (server side).

val get_global_persistent_data_session_timeout :
   ?session_name:string ->
    ?sp:server_params -> unit -> float option

Returns the timeout for persistent sessions (server side).


Personalizing session timeouts


val set_service_session_timeout :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> float option -> unit

sets the timeout for service session (server side) for one user, in seconds. None = no timeout

val unset_service_session_timeout :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> unit

remove the service session timeout for one user (and turn back to the default).

val get_service_session_timeout :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> float option

returns the timeout for current service session. None = no timeout

val set_volatile_data_session_timeout :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> float option -> unit

sets the timeout for volatile data session (server side) for one user, in seconds. None = no timeout

val unset_volatile_data_session_timeout :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> unit

remove the "volatile data" session timeout for one user (and turn back to the default).

val get_volatile_data_session_timeout :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> float option

returns the timeout for current volatile data session. None = no timeout

val set_volatile_session_timeout :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> float option -> unit

sets the timeout for volatile sessions (service and volatile data) (server side) for one user, in seconds. None = no timeout

val unset_volatile_session_timeout :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> unit

remove the session timeout for one user for both service session and volatile data session (and turn back to the default).

val set_persistent_data_session_timeout :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> float option -> unit Lwt.t

sets the timeout for persistent session (server side) for one user, in seconds. None = no timeout

val unset_persistent_data_session_timeout :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> unit Lwt.t

remove the persistent session timeout for one user (and turn back to the default).

val get_persistent_data_session_timeout :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> float option Lwt.t

returns the persistent session timeout for one user. None = no timeout


Session groups


type 'a session_data =

|No_data
|Data_session_expired
|Data of 'a


Session groups may be used for example to limit the number of sessions one user can open at the same time, or to implement a "close all sessions" feature. Usually, the group is the user name.

val set_service_session_group :
   ?set_max:int ->
    ?session_name:string ->
    ?secure:bool -> sp:server_params -> string -> unit

sets the group to which belong the service session. If the optional ?set_max parameter is present, also sets the maximum number of sessions in the group. None means "no limitation". If ~secure is false when the protocol is https, it will affect the unsecure session, otherwise, il will affect the secure session in https, the unsecure one in http.

val unset_service_session_group :
   ?set_max:int ->
    ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> unit

Remove the session from its group

val get_service_session_group :
   ?session_name:string ->
    ?secure:bool ->
    sp:server_params -> unit -> string session_data

returns the group to which belong the service session. If the session does not belong to any group, or if no session is opened, return None.

val set_volatile_data_session_group :
   ?set_max:int ->
    ?session_name:string ->
    ?secure:bool -> sp:server_params -> string -> unit

sets the group to which belong the volatile data session. If the optional ?set_max parameter is present, also sets the maximum number of sessions in the group. None means "no limitation".

val unset_volatile_data_session_group :
   ?set_max:int ->
    ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> unit

Remove the session from its group

val get_volatile_data_session_group :
   ?session_name:string ->
    ?secure:bool ->
    sp:server_params -> unit -> string session_data

returns the group to which belong the data session. If the session does not belong to any group, or if no session is opened, return None.

val set_persistent_data_session_group :
   ?set_max:int option ->
    ?session_name:string ->
    ?secure:bool -> sp:server_params -> string -> unit Lwt.t

sets the group to which belong the persistent session. If the optional ?set_max parameter is present, also sets the maximum number of sessions in the group. None means "no limitation".

val unset_persistent_data_session_group :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> unit Lwt.t

Remove the session from its group

val get_persistent_data_session_group :
   ?session_name:string ->
    ?secure:bool ->
    sp:server_params ->
    unit -> string session_data Lwt.t

returns the group to which belong the persistent session. If the session does not belong to any group, or if no session is opened, return None.


The following functions of this section set the maximum number of sessions in a session group, for the different kinds of session. None means "no limit". This won't modify existing groups. That value will be used only as default value if you do not specify the optional parameter ?set_max of function Eliom_sessions.set_volatile_data_session_group.

If there is no group, the number of sessions is limitated by sub network (which can be a problem for example if the server is behind a reverse proxy). It is highly recommended to use session groups!

val set_default_max_service_sessions_per_group : ?sp:server_params -> ?override_configfile:bool -> int -> unit

Sets the maximum number of service sessions in a session group (see above).

val set_default_max_volatile_data_sessions_per_group : ?sp:server_params -> ?override_configfile:bool -> int -> unit

Sets the maximum number of volatile data sessions in a session group (see above).

val set_default_max_persistent_data_sessions_per_group :
   ?sp:server_params ->
    ?override_configfile:bool -> int option -> unit

Sets the maximum number of persistent data sessions in a session group (see above).

val set_default_max_service_sessions_per_subnet : ?sp:server_params -> ?override_configfile:bool -> int -> unit

Sets the maximum number of service sessions in a subnet (see above).

val set_default_max_volatile_data_sessions_per_subnet : ?sp:server_params -> ?override_configfile:bool -> int -> unit

Sets the maximum number of volatile data sessions in a subnet (see above).

val set_default_max_volatile_sessions_per_group : ?sp:server_params -> ?override_configfile:bool -> int -> unit

Sets the maximum number of volatile sessions (data and service) in a session group (see above).

val set_default_max_volatile_sessions_per_subnet : ?sp:server_params -> ?override_configfile:bool -> int -> unit

Sets the maximum number of volatile sessions (data and service) in a subnet (see above).

val set_ipv4_subnet_mask :
   ?sp:server_params ->
    ?override_configfile:bool -> int32 -> unit

Sets the mask for subnet (IPV4).

val set_ipv6_subnet_mask :
   ?sp:server_params ->
    ?override_configfile:bool -> int64 * int64 -> unit

Sets the mask for subnet (IPV6).

val set_max_service_sessions_for_group_or_subnet :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> int -> unit

Sets the maximum number of service sessions in the current session group (or for the client sub network, if there is no group).

val set_max_volatile_data_sessions_for_group_or_subnet :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> int -> unit

Sets the maximum number of volatile data sessions in the current session group (or for the client sub network, if there is no group).


Cookies



The functions in this section ask the browser to set the cookie expiration date, for the different kinds of session, in seconds, since the 1st of January 1970. None means the cookie will expire when the browser is closed. Note: there is no way to set cookies for an infinite time on browsers.

val set_volatile_session_cookies_exp_date :
   ?session_name:string ->
    ?secure:bool -> sp:server_params -> float option -> unit

Sets the cookie expiration date for the current volatile sessions (service and data) (see above).

Sets the cookie expiration date for the current service session (see above).

Sets the cookie expiration date for the current data session (see above).

Sets the cookie expiration date for the persistent session (see above).


Exceptions and fallbacks


val get_request_cache : sp:server_params -> Polytables.t

returns a table in which you can store all the data you want during a request. It can also be used to send information after an action. Keep an eye on this information to know what succeeded before the current service was called (failed connection, timeout ...) The table is created at the beginning of the request.

val clean_request_cache : sp:server_params -> unit

Remove all data from the request cache

returns true if the coservice called has not been found. In that case, the current service is the fallback.

val get_expired_service_sessions : sp:server_params -> string list

returns the list of names of service sessions expired for the current request.

val get_previous_extension_error_code : sp:server_params -> int

returns the HTTP error code sent by the Ocsigen extension that tried to answer to the request before Eliom. It is 404 by default.


Getting information about files uploaded



Warning: The files uploaded are automatically erased by Ocsigen just after the request has been fulfilled. If you want to keep them, create a new hard link yourself during the service (or make a copy).

val get_tmp_filename : Ocsigen_lib.file_info -> string

returns the filename used by Ocsigen for the uploaded file.

val get_filesize : Ocsigen_lib.file_info -> int64

returns the size of the file.

val get_original_filename : Ocsigen_lib.file_info -> string

returns the name the file had on the client when it has been sent.


Getting information from the configuration file


val get_config : unit -> Simplexmlparser.xml list

returns the information of the configuration file concerning that site (between <site> and </site>).

Warning: You must call that function during the initialisation of your module (not during a Lwt thread or a service) otherwise it will raise the exception Eliom_common.Eliom_function_forbidden_outside_site_loading. If you want to build a statically linkable module, you must call this function inside the initialisation function given to Eliom_services.register_eliom_module.

val get_site_dir : sp:server_params -> Ocsigen_lib.url_path

returns the root of the site.

val get_config_default_charset : sp:server_params -> string

returns the default charset for this site


Session data



In memory session data


type 'a volatile_table

The type of (volatile) session data tables.

val create_volatile_table : ?sp:server_params -> unit -> 'a volatile_table

creates a table in memory where you can store the session data for all users.

Warning: If you use that function after the initialization phase, you must give the ~sp parameter, otherwise it will raise the exception Eliom_common.Eliom_function_forbidden_outside_site_loading.

val get_volatile_session_data :
   ?session_name:string ->
    ?secure:bool ->
    table:'a volatile_table ->
    sp:server_params -> unit -> 'a session_data

gets session data for the current session (if any).

val set_volatile_session_data :
   ?session_name:string ->
    ?secure:bool ->
    table:'a volatile_table ->
    sp:server_params -> 'a -> unit

sets session data for the current session.

val remove_volatile_session_data :
   ?session_name:string ->
    ?secure:bool ->
    table:'a volatile_table ->
    sp:server_params -> unit -> unit

removes session data for the current session (but does not close the session). If the session does not exist, do nothing.


Persistent sessions


type 'a persistent_table

The type of persistent session data tables.

val create_persistent_table : string -> 'a persistent_table

creates a table on hard disk where you can store the session data for all users. It uses Ocsipersist.

val get_persistent_session_data :
   ?session_name:string ->
    ?secure:bool ->
    table:'a persistent_table ->
    sp:server_params ->
    unit -> 'a session_data Lwt.t

gets persistent session data for the current persistent session (if any)

val set_persistent_session_data :
   ?session_name:string ->
    ?secure:bool ->
    table:'a persistent_table ->
    sp:server_params -> 'a -> unit Lwt.t

sets persistent session data for the current persistent session

val remove_persistent_session_data :
   ?session_name:string ->
    ?secure:bool ->
    table:'a persistent_table ->
    sp:server_params -> unit -> unit Lwt.t

removes session data for the current persistent session (but does not close the session). If the session does not exist, do nothing.


Closing sessions


val close_session :
   ?close_group:bool ->
    ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> unit Lwt.t

Close Eliom's current sessions if opened (service session, volatile data session and persistent session).

Shortcut for Eliom_sessions.close_volatile_data_session followed by Eliom_sessions.close_service_session and Eliom_sessions.close_persistent_data_session.

By default will close both secure and unsecure sessions, but if ~secure is present.

Warning: you may also want to remove some data from the polymorphic request data table when closing a session (See Eliom_sessions.get_request_cache).

val close_volatile_session :
   ?close_group:bool ->
    ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> unit

Close Eliom's current volatile session if opened (both service session and volatile data session) (destroying all session data for that user).

Shortcut for Eliom_sessions.close_volatile_data_session followed by Eliom_sessions.close_service_session.

val close_persistent_data_session :
   ?close_group:bool ->
    ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> unit Lwt.t

Close Eliom's current persistent session if opened (destroying all persistent data for that user)

val close_volatile_data_session :
   ?close_group:bool ->
    ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> unit

Close Eliom's current data session, if opened (destroying all session data for that user)

val close_service_session :
   ?close_group:bool ->
    ?session_name:string ->
    ?secure:bool -> sp:server_params -> unit -> unit

Close Eliom's current service session, if opened


Administrating sessions


val close_all_sessions :
   ?close_group:bool ->
    ?session_name:string ->
    ?sp:server_params -> unit -> unit Lwt.t

Close all persistent and volatile sessions for one session name. If the optional parameter ?session_name (session name) is not present, the session with default name is closed.

Warning: If you use this function after the initialisation phase, you must give the ~sp parameter, otherwise it will raise the exception Eliom_common.Eliom_function_forbidden_outside_site_loading.

val close_all_volatile_sessions :
   ?close_group:bool ->
    ?session_name:string ->
    ?sp:server_params -> unit -> unit Lwt.t

Close all volatile (service and volatile data) sessions for one session name. If the optional parameter ?session_name (session name) is not present, the session with default name is closed.

Warning: If you use this function after the initialisation phase, you must give the ~sp parameter, otherwise it will raise the exception Eliom_common.Eliom_function_forbidden_outside_site_loading.

val close_all_persistent_data_sessions :
   ?close_group:bool ->
    ?session_name:string ->
    ?sp:server_params -> unit -> unit Lwt.t

Close all persistent sessions for one session name. If the optional parameter ?session_name (session name) is not present, the session with default name is closed.

Warning: If you use this function after the initialisation phase, you must give the ~sp parameter, otherwise it will raise the exception Eliom_common.Eliom_function_forbidden_outside_site_loading.

val close_all_service_sessions :
   ?close_group:bool ->
    ?session_name:string ->
    ?sp:server_params -> unit -> unit Lwt.t

Close all service sessions for one session name. If the optional parameter ?session_name (session name) is not present, the session with default name is closed.

Warning: If you use this function after the initialisation phase, you must give the ~sp parameter, otherwise it will raise the exception Eliom_common.Eliom_function_forbidden_outside_site_loading.

val close_all_volatile_data_sessions :
   ?close_group:bool ->
    ?session_name:string ->
    ?sp:server_params -> unit -> unit Lwt.t

Close all volatile data sessions for one session name. If the optional parameter ?session_name (session name) is not present, the session with default name is closed.

Warning: If you use this function after the initialisation phase, you must give the ~sp parameter, otherwise it will raise the exception Eliom_common.Eliom_function_forbidden_outside_site_loading.

module Session_admin: sig..end


Getting parameters (low level)



The usual way to get parameters with Eliom is to use the second and third parameters of the service handlers. These are low level functions you may need for more advanced use.

val get_get_params : sp:server_params -> (string * string) list

returns the parameters of the URL (GET parameters) that concern the running service. For example in the case of a non-attached coservice called from a page with GET parameters, only the parameters of that non-attached coservice are returned (even if the other are still in the URL).

val get_all_current_get_params : sp:server_params -> (string * string) list

returns current parameters of the URL (GET parameters) (even those that are for subsequent services, but not previous actions)

val get_initial_get_params : sp:server_params -> (string * string) list

returns all parameters of the URL (GET parameters) as sent initially by the browser

val get_other_get_params : sp:server_params -> (string * string) list

returns the parameters of the URL (GET parameters) that do not concern the running service.

val get_nl_get_params :
   sp:server_params ->
    (string * string) list Ocsigen_lib.String_Table.t

returns non localized parameters in the URL.

val get_persistent_nl_get_params :
   sp:server_params ->
    (string * string) list Ocsigen_lib.String_Table.t

returns persistent non localized parameters in the URL.

val get_nl_post_params :
   sp:server_params ->
    (string * string) list Ocsigen_lib.String_Table.t

returns non localized POST parameters.

val get_post_params : sp:server_params -> (string * string) list Lwt.t

returns the parameters in the body of the HTTP request (POST parameters) that concern the running service

val get_all_post_params : sp:server_params -> (string * string) list

returns all parameters in the body of the HTTP request (POST parameters) (even those that are for another service)


Other low level functions



You probably don't need these functions.

returns all the information about the request.

val get_config_info : sp:server_params -> Ocsigen_extensions.config_info

returns information from the configuration files.

returns all the information about the request and config.

val get_session_name : sp:server_params -> string option

returns the name of the sessions to which belongs the running service (None if it is not a session service)

returns the value of the Eliom's cookies for one persistent session. Returns None is no session is active.

returns the value of Eliom's cookies for one service session. Returns None is no session is active.

returns the value of Eliom's cookies for one "volatile data" session. Returns None is no session is active.

val get_si : sp:server_params -> Eliom_common.sess_info