Další možnosti login a logout požadavků

Atribut session v obálce je povinný s jedinou výjimkou. Tou výjimkou je případ, kdy obsahem obálky request je samotný požadavek login, který přidělené číslo seance vrací. Jeden uživatel určitého jména může mít v jednom okamžiku otevřenu více než jednu seanci s tím, že všechny jsou platné a použitelné zároveň. Číslo seance tak přestává být platné až teprve po uplynutí dlouhé doby nečinnosti nebo při zaslání požadavku logout v obálce request, v jejímž atributu session je číslo ukončované seance uvedeno.

V obálce request, kde je uveden požadavek login mohou být uvedeny i jiné požadavky, vč. požadavku logout.

A) Je-li požadavek login poslán v obálce request spolu s dalšími požadavky, pak ma následující chování:

1) Je-li součástí tagu request atribut session, je stávající session odhlášena.

2) Nejedná-li se o session s rozšířeným zabezpečením (SMS), pak jsou požadavky normálně provedeny pod nově vzniklou session.

3) Jedná-li se o session s rozšířenym zabezpečením (SMS), je odeslána pouze odpověď na požadavek login, ostatní požadavky jsou zcela ignorovany!

B) Je-li požadavek logout poslán v obálce request spolu s dalšími požadavky, pak má následující chování:

1) Všechny požadavky jsou provedeny v kontextu právě probíhající session (bez ohledu zda jsou před nebo po požadavku logout).

2) Po dokončení všech požadavků je session odhlášena.

Je-li požadavek login a logout poslán v obálce request společně, pak je postupováno nejprve podle popisu A), následně podle popisu B). Je tedy vytvorene nová seance (případně i odhlášena stávající v atributu session tagu request) a následně jsou seance, pokud nejde o rozšířené (SMS) zabezpečení, provedeny všechny požadavky a následně je seance odhlášena. Důvod tohoto postupu je možnost používat "in-request sessions".

Dále ještě platí, že více požadavků login v jedné obálce request je ignorovano - na všechny klientský program dostane kladnou odpověď, ale je vytvořena pouze jedna session a všechny obsahují číslo této session. Více požadavků logout v jedné obálce request je sice provedeno, ale pouze na prvni klient dostane kladnou odpověď, na ostatni odpoví, že seance neexistuje. Je ale zřejmé, že Posílat požadavky logout více než jednou nemá smysl.

Příklad "in-request session":

example
<request>
<logout/>
<login/>
<save-document>
...
</save-document>
<get-document ... />
<sql-query>
<select type="...">...</select>
</sql-query>
</request>

Přesto, že logout požadavek je uveden jako první, bude proveden až jako poslední. Je tedy lépe jej uvádět na konci:

example
<request>
<login/>
...
<logout/>
</request>

Toto pořadí jasněji vypovídá o záměru krátkodobé seance.