# documentation:2.0:browseablesessionbackend
Keywords: documentation,2.0,browseablesessionbackend

# Backend de session explorable

## Présentation

Le backend de session explorable (Apache::Session::Browseable) fonctionne exactement comme le module Apache::Session::* correspondant mais ajoute des index qui améliore les performances de l'explorateur de session et les restrictions de sessions.

Lorsqu'on utilise des fonctionnalités telles SAML (authentification ou fournisseur d'identité), CAS (fournisseur d'identité) ou le service de réinitialisation de mots-de-passe, il faut également indexer quelques champs.

Sans index, LL::NG doit récupérer toutes les sessions stockées dans le backend et les examiner pour trouver les sessions demandées. Avec index, LL::NG ne récupère que les sessions demandées.

Le tableau suivant liste les champs à indexer suivant les fonctionnalités dont on souhaite améliorer les performances :

Fonctionnalité | Champs à indexer
--- | ---
Database cleaup (cron) | _session_kind _utime
Explorateur de sessions | _session_kind ipAddr WHATTOTRACE
Session explorer (persistent sessions) | _session_kind _session_uid
Resctriction d'ouverture de session | _session_kind ipAddr WHATTOTRACE

See Apache::Session::Browseable::* man page to see how use indexes.

WHATTOTRACE must be replaced by the attribute or macro configured in the What To Trace parameter (REMOTE_USER). By default: _whatToTrace
Il est préférable d'utiliser des bases de sessions séparées pour les sessions standard, SAML et CAS afin de gérer séparemment les index.
La documentation ci-dessous explique comment fixer les index à ipAddr et _whatToTrace. À adapter pour configurer les index voulus.

## Browseable NoSQL

Il est possible d'utiliser Redis comme expliqué dans Backend de sessions Redis.

Il suffira juste d'ajouter le paramètre `Index` dans `Paramètres généraux` » `Sessions` » `Stockage des sessions` » `Module Apache::Session` :

Paramètres exigés
Nom | Commentaire | Exemple
--- | --- | ---
server | Serveur Redis | 127.0.0.1:6379
Index | Index | _whatToTrace ipAddr

## Browseable SQL

This documentation concerns PostgreSQL. Quelques adaptations sont nécessaires pour les autres bases de données.

### Préparer la base de données

La base de donnée doit être préparée exactement comme celle du backend de session SQL si ce n'est qu'un champ doit être ajouté pour chaque donnée à indexer.

     Apache::SESSION::Browseable::Postgres example:
    <code sql>
    CREATE UNLOGGED TABLE sessions (
        id VARCHAR(64) NOT NULL PRIMARY KEY,
        a_session text,
        _whatToTrace text,
        _session_kind text,
        _utime BIGINT,
        ipAddr text
    );
    CREATE INDEX uid1 ON sessions USING BTREE (_whatToTrace);
    CREATE INDEX s1   ON sessions (_session_kind);
    CREATE INDEX u1   ON sessions (_utime);
    CREATE INDEX ip1  ON sessions USING BTREE (ipAddr);

For Session Explorer and one-off sessions, it is recommended to use BTREE or any index method that indexes partial content.

“id” fieds is set to `varchar(64)` (instead of char(32)) to use the now recommended SHA256 hash algorithm. See Sessions for more details.

With new Apache::Session::Browseable::PgHstore and PgJSON, you don't need to declare indexes in `CREATE TABLE` since “json” and “hstore” type are browseable. You should anyway add some indexes (see manpage).

### Manager

Aller dans le manager et mettre le module de session (Apache::Session::Browseable::MySQL pour MySQL) dans `Paramètres généraux` » `Sessions` » `Stockage des sessions` » `Module Apache::Session` et ajouter le paramètre suivant (sensible à la casse) :

Paramètres exigés
Nom | Commentaire | Exemple
--- | --- | ---
DataSource | La chaîne DBI | dbi:Pg:database=sessions
UserName | Le login de la base de données | lemonldapng
Mot-de-passe | Le mot de passe de la base de données | mysuperpassword
Index | Index | _whatToTrace ipAddr _session_kind _utime

Apache::Session::Browseable::MySQL n'utilise pas les locks pour conserver les performances.

Pour les bases de données telles PostgreSQL, ne pas oublier d'ajouter “Commit” avec une valeur de 1

## Browseable LDAP

Aller dans le manager et mettre le module de session à `Apache::Session::Browseable::LDAP` Configurer ensuite les options comme dans le backend de sessions LDAP.

Il faut ajouter le champ `Index`, on peut aussi configurer le champ `ldapAttributeIndex` pour indiquer le nom d'attribut dans lequel les index doivent être stockés.

Paramètres exigés
Nom | Commentaire | Exemple
--- | --- | ---
ldapServer | URI du serveur | ldap://localhost
ldapConfBase | DN de la branche des sessions | ou=sessions,dc=example,dc=com
ldapBindDN | Login de connexion | cn=admin,dc=example,dc=password
ldapBindPassword | Mot-de-passe de connexion | secret
Index | Liste d'index | _whatToTrace ipAddr
Paramètres optionnels
Nom | Commentaire | Valeur par défaut
ldapObjectClass | Objectclass de l'entrée | applicationProcess
ldapAttributeId | Attribut où stocker l'idetifiant de session | cn
ldapAttributeContent | Attribut où stocker le contenu de la session | description
ldapAttributeIndex | Attribut où stocker les index | ou

## Sécurité

Restreindre l'accès réseau au backend.

On peut utiliser différent login/mot-de-passe pour les serveurs en surchargeant les paramètres `globalStorage` et `globalStorageOptions` dans le fichier lemonldap-ng.ini.

## Performances

Here are some recommended configurations:

Browseable::Postgres:

    CREATE UNLOGGED TABLE sessions (
        id VARCHAR(64) NOT NULL PRIMARY KEY,
        a_session text,
        _whatToTrace text,
        _session_kind text,
        _utime BIGINT,
        ipAddr VARCHAR(64)
    );
    CREATE INDEX uid1 ON sessions USING BTREE (_whatToTrace text_pattern_ops);
    CREATE INDEX _s1 ON sessions (_session_kind);
    CREATE INDEX _u1 ON sessions (_utime);
    CREATE INDEX ip1 ON sessions USING BTREE (ipAddr)

Browseable::MySQL:

    CREATE TABLE sessions (
        id VARCHAR(64) NOT NULL PRIMARY KEY,
        a_session text,
        _whatToTrace VARCHAR(64),
        _session_kind VARCHAR(15),
        _utime BIGINT
    );
    CREATE INDEX uid1 ON sessions (_whatToTrace) USING BTREE;
    CREATE INDEX _s1 ON sessions (_session_kind);
    CREATE INDEX _u1 ON sessions (_utime);
    CREATE INDEX ip1 ON sessions (ipAddr) USING BTREE;