sig
  val discard :
    scope:[< `Client_process of Eliom_common.scope_hierarchy
           | `Request
           | `Session of Eliom_common.scope_hierarchy
           | `Session_group of Eliom_common.scope_hierarchy ] ->
    ?secure:bool -> unit -> unit Lwt.t
  val discard_all_scopes : ?secure:bool -> unit -> unit Lwt.t
  val discard_data :
    ?persistent:bool ->
    scope:[< `Client_process of Eliom_common.scope_hierarchy
           | `Request
           | `Session of Eliom_common.scope_hierarchy
           | `Session_group of Eliom_common.scope_hierarchy ] ->
    ?secure:bool -> unit -> unit Lwt.t
  val discard_services :
    scope:[< Eliom_common.user_scope ] -> ?secure:bool -> unit -> unit
  type state_status = Alive_state | Empty_state | Expired_state
  val service_state_status :
    scope:[< Eliom_common.user_scope ] ->
    ?secure:bool -> unit -> Eliom_state.state_status
  val volatile_data_state_status :
    scope:[< Eliom_common.user_scope ] ->
    ?secure:bool -> unit -> Eliom_state.state_status
  val persistent_data_state_status :
    scope:[< Eliom_common.user_scope ] ->
    ?secure:bool -> unit -> Eliom_state.state_status Lwt.t
  val set_cookie :
    ?cookie_level:Eliom_common.cookie_level ->
    ?path:string list ->
    ?exp:float -> ?secure:bool -> name:string -> value:string -> unit -> unit
  val unset_cookie :
    ?cookie_level:Eliom_common.cookie_level ->
    ?path:string list -> name:string -> unit -> unit
  val set_service_session_group :
    ?set_max:int ->
    ?scope:Eliom_common.session_scope -> ?secure:bool -> string -> unit
  val unset_service_session_group :
    ?set_max:int ->
    ?scope:Eliom_common.session_scope -> ?secure:bool -> unit -> unit
  val get_service_session_group :
    ?scope:Eliom_common.session_scope ->
    ?secure:bool -> unit -> string option
  val get_service_session_group_size :
    ?scope:Eliom_common.session_scope -> ?secure:bool -> unit -> int option
  val set_volatile_data_session_group :
    ?set_max:int ->
    ?scope:Eliom_common.session_scope -> ?secure:bool -> string -> unit
  val unset_volatile_data_session_group :
    ?set_max:int ->
    ?scope:Eliom_common.session_scope -> ?secure:bool -> unit -> unit
  val get_volatile_data_session_group :
    ?scope:Eliom_common.session_scope ->
    ?secure:bool -> unit -> string option
  val get_volatile_data_session_group_size :
    ?scope:Eliom_common.session_scope -> ?secure:bool -> unit -> int option
  val set_persistent_data_session_group :
    ?set_max:int option ->
    ?scope:Eliom_common.session_scope -> ?secure:bool -> string -> unit Lwt.t
  val unset_persistent_data_session_group :
    ?scope:Eliom_common.session_scope -> ?secure:bool -> unit -> unit Lwt.t
  val get_persistent_data_session_group :
    ?scope:Eliom_common.session_scope ->
    ?secure:bool -> unit -> string option Lwt.t
  val set_default_max_service_sessions_per_group :
    ?override_configfile:bool -> int -> unit
  val set_default_max_volatile_data_sessions_per_group :
    ?override_configfile:bool -> int -> unit
  val set_default_max_persistent_data_sessions_per_group :
    ?override_configfile:bool -> int option -> unit
  val set_default_max_volatile_sessions_per_group :
    ?override_configfile:bool -> int -> unit
  val set_default_max_service_sessions_per_subnet :
    ?override_configfile:bool -> int -> unit
  val set_default_max_volatile_data_sessions_per_subnet :
    ?override_configfile:bool -> int -> unit
  val set_default_max_volatile_sessions_per_subnet :
    ?override_configfile:bool -> int -> unit
  val set_default_max_service_tab_sessions_per_group :
    ?override_configfile:bool -> int -> unit
  val set_default_max_volatile_data_tab_sessions_per_group :
    ?override_configfile:bool -> int -> unit
  val set_default_max_persistent_data_tab_sessions_per_group :
    ?override_configfile:bool -> int option -> unit
  val set_default_max_volatile_tab_sessions_per_group :
    ?override_configfile:bool -> int -> unit
  val set_ipv4_subnet_mask : ?override_configfile:bool -> int -> unit
  val set_ipv6_subnet_mask : ?override_configfile:bool -> int -> unit
  val set_max_service_states_for_group_or_subnet :
    scope:Eliom_common.user_scope -> ?secure:bool -> int -> unit
  val set_max_volatile_data_states_for_group_or_subnet :
    scope:Eliom_common.user_scope -> ?secure:bool -> int -> unit
  val set_max_volatile_states_for_group_or_subnet :
    scope:Eliom_common.user_scope -> ?secure:bool -> int -> unit
  val set_service_cookie_exp_date :
    cookie_scope:Eliom_common.cookie_scope ->
    ?secure:bool -> float option -> unit
  val set_volatile_data_cookie_exp_date :
    cookie_scope:Eliom_common.cookie_scope ->
    ?secure:bool -> float option -> unit
  val set_persistent_data_cookie_exp_date :
    cookie_scope:Eliom_common.cookie_scope ->
    ?secure:bool -> float option -> unit Lwt.t
  val set_global_volatile_state_timeout :
    cookie_scope:[< Eliom_common.cookie_scope ] ->
    ?secure:bool ->
    ?recompute_expdates:bool ->
    ?override_configfile:bool -> float option -> unit
  val set_global_service_state_timeout :
    cookie_scope:[< Eliom_common.cookie_scope ] ->
    ?secure:bool ->
    ?recompute_expdates:bool ->
    ?override_configfile:bool -> float option -> unit
  val set_default_global_service_state_timeout :
    cookie_level:[< Eliom_common.cookie_level ] ->
    ?override_configfile:bool -> float option -> unit
  val set_global_volatile_data_state_timeout :
    cookie_scope:[< Eliom_common.cookie_scope ] ->
    ?secure:bool ->
    ?recompute_expdates:bool ->
    ?override_configfile:bool -> float option -> unit
  val set_default_global_volatile_data_state_timeout :
    cookie_level:[< Eliom_common.cookie_level ] ->
    ?override_configfile:bool -> float option -> unit
  val set_global_persistent_data_state_timeout :
    cookie_scope:[< Eliom_common.cookie_scope ] ->
    ?secure:bool ->
    ?recompute_expdates:bool ->
    ?override_configfile:bool -> float option -> unit
  val set_default_global_persistent_data_state_timeout :
    cookie_level:[< Eliom_common.cookie_level ] ->
    ?override_configfile:bool -> float option -> unit
  val get_global_service_state_timeout :
    ?secure:bool ->
    cookie_scope:[< Eliom_common.cookie_scope ] -> unit -> float option
  val get_global_volatile_data_state_timeout :
    ?secure:bool ->
    cookie_scope:[< Eliom_common.cookie_scope ] -> unit -> float option
  val get_global_persistent_data_state_timeout :
    ?secure:bool ->
    cookie_scope:[< Eliom_common.cookie_scope ] -> unit -> float option
  val set_service_state_timeout :
    cookie_scope:Eliom_common.cookie_scope ->
    ?secure:bool -> float option -> unit
  val unset_service_state_timeout :
    cookie_scope:[< Eliom_common.cookie_scope ] ->
    ?secure:bool -> unit -> unit
  val get_service_state_timeout :
    cookie_scope:[< Eliom_common.cookie_scope ] ->
    ?secure:bool -> unit -> float option
  val set_volatile_data_state_timeout :
    cookie_scope:[< Eliom_common.cookie_scope ] ->
    ?secure:bool -> float option -> unit
  val unset_volatile_data_state_timeout :
    cookie_scope:[< Eliom_common.cookie_scope ] ->
    ?secure:bool -> unit -> unit
  val get_volatile_data_state_timeout :
    cookie_scope:[< Eliom_common.cookie_scope ] ->
    ?secure:bool -> unit -> float option
  val set_persistent_data_state_timeout :
    cookie_scope:[< Eliom_common.cookie_scope ] ->
    ?secure:bool -> float option -> unit Lwt.t
  val unset_persistent_data_state_timeout :
    cookie_scope:[< Eliom_common.cookie_scope ] ->
    ?secure:bool -> unit -> unit Lwt.t
  val get_persistent_data_state_timeout :
    cookie_scope:[< Eliom_common.cookie_scope ] ->
    ?secure:bool -> unit -> float option Lwt.t
  type 'a volatile_table
  type 'a persistent_table
  val discard_everything : unit -> unit Lwt.t
  val discard_all :
    scope:Eliom_common.user_scope -> ?secure:bool -> unit -> unit Lwt.t
  val discard_all_data :
    ?persistent:bool ->
    scope:Eliom_common.user_scope -> ?secure:bool -> unit -> unit Lwt.t
  val discard_all_services :
    scope:Eliom_common.user_scope -> ?secure:bool -> unit -> unit Lwt.t
  module Ext :
    sig
      exception Wrong_scope
      type timeout = TGlobal | TNone | TSome of float
      type service_cookie_info
      type data_cookie_info
      type persistent_cookie_info
      type (+'a, +'b) state
      val volatile_data_group_state :
        ?scope:Eliom_common.session_group_scope ->
        string -> ([> `Session_group ], [> `Data ]) Eliom_state.Ext.state
      val persistent_data_group_state :
        ?scope:Eliom_common.session_group_scope ->
        string -> ([> `Session_group ], [> `Pers ]) Eliom_state.Ext.state
      val service_group_state :
        ?scope:Eliom_common.session_group_scope ->
        string -> ([> `Session_group ], [> `Service ]) Eliom_state.Ext.state
      val current_volatile_data_state :
        ?secure:bool ->
        ?scope:Eliom_common.user_scope ->
        unit ->
        ([< Eliom_common.user_level ], [< `Data ]) Eliom_state.Ext.state
      val current_persistent_data_state :
        ?secure:bool ->
        ?scope:Eliom_common.user_scope ->
        unit ->
        ([< Eliom_common.user_level ], [< `Pers ]) Eliom_state.Ext.state
        Lwt.t
      val current_service_state :
        ?secure:bool ->
        ?scope:Eliom_common.user_scope ->
        unit ->
        ([< Eliom_common.user_level ], [< `Service ]) Eliom_state.Ext.state
      val discard_state : state:('a, 'b) Eliom_state.Ext.state -> unit Lwt.t
      val fold_volatile_sub_states :
        ?sitedata:Eliom_common.sitedata ->
        state:([< `Session | `Session_group ], [< `Data | `Service ] as 'k)
              Eliom_state.Ext.state ->
        ('->
         ([< `Client_process | `Session ], 'k) Eliom_state.Ext.state -> 'a) ->
        '-> 'a
      val iter_volatile_sub_states :
        ?sitedata:Eliom_common.sitedata ->
        state:([< `Session | `Session_group ], [< `Data | `Service ] as 'k)
              Eliom_state.Ext.state ->
        (([< `Client_process | `Session ], 'k) Eliom_state.Ext.state -> unit) ->
        unit
      val fold_sub_states :
        ?sitedata:Eliom_common.sitedata ->
        state:([< `Session | `Session_group ],
               [< `Data | `Pers | `Service ] as 'k)
              Eliom_state.Ext.state ->
        ('->
         ([< `Client_process | `Session ], 'k) Eliom_state.Ext.state ->
         'Lwt.t) ->
        '-> 'Lwt.t
      val iter_sub_states :
        ?sitedata:Eliom_common.sitedata ->
        state:([< `Session | `Session_group ], 'k) Eliom_state.Ext.state ->
        (([< `Client_process | `Session ], 'k) Eliom_state.Ext.state ->
         unit Lwt.t) ->
        unit Lwt.t
      module Low_level :
        sig
          val get_volatile_data :
            state:([< `Client_process | `Session | `Session_group ],
                   [< `Data ])
                  Eliom_state.Ext.state ->
            table:'Eliom_state.volatile_table -> 'a
          val get_persistent_data :
            state:([< `Client_process | `Session | `Session_group ],
                   [< `Pers ])
                  Eliom_state.Ext.state ->
            table:'Eliom_state.persistent_table -> 'Lwt.t
          val set_volatile_data :
            state:([< `Client_process | `Session | `Session_group ],
                   [< `Data ])
                  Eliom_state.Ext.state ->
            table:'Eliom_state.volatile_table -> '-> unit
          val set_persistent_data :
            state:([< `Client_process | `Session | `Session_group ],
                   [< `Pers ])
                  Eliom_state.Ext.state ->
            table:'Eliom_state.persistent_table -> '-> unit Lwt.t
          val remove_volatile_data :
            state:([< `Client_process | `Session | `Session_group ],
                   [< `Data ])
                  Eliom_state.Ext.state ->
            table:'Eliom_state.volatile_table -> unit
          val remove_persistent_data :
            state:([< `Client_process | `Session | `Session_group ],
                   [< `Pers ])
                  Eliom_state.Ext.state ->
            table:'Eliom_state.persistent_table -> unit Lwt.t
        end
      val get_service_cookie_info :
        ([< Eliom_common.cookie_level ], [ `Service ]) Eliom_state.Ext.state ->
        Eliom_state.Ext.service_cookie_info
      val get_volatile_data_cookie_info :
        ([< Eliom_common.cookie_level ], [ `Data ]) Eliom_state.Ext.state ->
        Eliom_state.Ext.data_cookie_info
      val get_persistent_cookie_info :
        ([< Eliom_common.cookie_level ], [ `Pers ]) Eliom_state.Ext.state ->
        Eliom_state.Ext.persistent_cookie_info Lwt.t
      val get_service_cookie_scope :
        cookie:Eliom_state.Ext.service_cookie_info -> Eliom_common.user_scope
      val get_volatile_data_cookie_scope :
        cookie:Eliom_state.Ext.data_cookie_info -> Eliom_common.user_scope
      val get_persistent_data_cookie_scope :
        cookie:Eliom_state.Ext.persistent_cookie_info ->
        Eliom_common.user_scope
      val set_service_cookie_timeout :
        cookie:Eliom_state.Ext.service_cookie_info -> float option -> unit
      val set_volatile_data_cookie_timeout :
        cookie:Eliom_state.Ext.data_cookie_info -> float option -> unit
      val set_persistent_data_cookie_timeout :
        cookie:Eliom_state.Ext.persistent_cookie_info ->
        float option -> unit Lwt.t
      val get_service_cookie_timeout :
        cookie:Eliom_state.Ext.service_cookie_info -> Eliom_state.Ext.timeout
      val get_volatile_data_cookie_timeout :
        cookie:Eliom_state.Ext.data_cookie_info -> Eliom_state.Ext.timeout
      val get_persistent_data_cookie_timeout :
        cookie:Eliom_state.Ext.persistent_cookie_info ->
        Eliom_state.Ext.timeout
      val unset_service_cookie_timeout :
        cookie:Eliom_state.Ext.service_cookie_info -> unit
      val unset_volatile_data_cookie_timeout :
        cookie:Eliom_state.Ext.data_cookie_info -> unit
      val unset_persistent_data_cookie_timeout :
        cookie:Eliom_state.Ext.persistent_cookie_info -> unit Lwt.t
      val get_session_group_list : unit -> string list
      val iter_service_cookies :
        (Eliom_state.Ext.service_cookie_info -> unit Lwt.t) -> unit Lwt.t
      val iter_volatile_data_cookies :
        (Eliom_state.Ext.data_cookie_info -> unit Lwt.t) -> unit Lwt.t
      val iter_persistent_data_cookies :
        (Eliom_state.Ext.persistent_cookie_info -> unit Lwt.t) -> unit Lwt.t
      val fold_service_cookies :
        (Eliom_state.Ext.service_cookie_info -> '-> 'Lwt.t) ->
        '-> 'Lwt.t
      val fold_volatile_data_cookies :
        (Eliom_state.Ext.data_cookie_info -> '-> 'Lwt.t) ->
        '-> 'Lwt.t
      val fold_persistent_data_cookies :
        (Eliom_state.Ext.persistent_cookie_info -> '-> 'Lwt.t) ->
        '-> 'Lwt.t
      val untype_state :
        ('a, 'b) Eliom_state.Ext.state -> ('c, 'd) Eliom_state.Ext.state
    end
  type 'a state_data = No_data | Data_session_expired | Data of 'a
  val create_volatile_table :
    scope:Eliom_common.user_scope ->
    ?secure:bool -> unit -> 'Eliom_state.volatile_table
  val get_volatile_data :
    table:'Eliom_state.volatile_table -> unit -> 'Eliom_state.state_data
  val set_volatile_data : table:'Eliom_state.volatile_table -> '-> unit
  val remove_volatile_data :
    table:'Eliom_state.volatile_table -> unit -> unit
  val create_persistent_table :
    scope:Eliom_common.user_scope ->
    ?secure:bool -> string -> 'Eliom_state.persistent_table Lwt.t
  val get_persistent_data :
    table:'Eliom_state.persistent_table ->
    unit -> 'Eliom_state.state_data Lwt.t
  val set_persistent_data :
    table:'Eliom_state.persistent_table -> '-> unit Lwt.t
  val remove_persistent_data :
    table:'Eliom_state.persistent_table -> unit -> unit Lwt.t
  val get_persistent_data_cookie :
    cookie_scope:Eliom_common.cookie_scope ->
    ?secure:bool -> unit -> Eliom_common.Hashed_cookies.t option Lwt.t
  val get_service_cookie :
    cookie_scope:Eliom_common.cookie_scope ->
    ?secure:bool -> unit -> Eliom_common.Hashed_cookies.t option
  val get_volatile_data_cookie :
    cookie_scope:Eliom_common.cookie_scope ->
    ?secure:bool -> unit -> Eliom_common.Hashed_cookies.t option
  val number_of_service_cookies : unit -> int
  val number_of_volatile_data_cookies : unit -> int
  val number_of_tables : unit -> int
  val number_of_table_elements : unit -> int list
  val number_of_persistent_data_cookies : unit -> int Lwt.t
  val number_of_persistent_tables : unit -> int
  val number_of_persistent_table_elements : unit -> (string * int) list Lwt.t
  val get_global_table : unit -> Eliom_common.tables
  val get_session_service_table :
    sp:Eliom_common.server_params ->
    scope:Eliom_common.user_scope ->
    ?secure:bool -> unit -> Eliom_common.tables Stdlib.ref
  val get_session_service_table_if_exists :
    sp:Eliom_common.server_params ->
    scope:Eliom_common.user_scope ->
    ?secure:bool -> unit -> Eliom_common.tables Stdlib.ref
  val create_volatile_table_during_session_ :
    scope:Eliom_common.user_scope ->
    secure:bool -> Eliom_common.sitedata -> 'Eliom_state.volatile_table
end