**Language / Язык:** [English](session.md) | [Русский](../ru/domains/session.md)

# Session

Durable session identity shared by REST and SOAP:
[`app/vsphere/security/session.py`](../../app/vsphere/security/session.py).

## Endpoints

| Method | Path | Notes |
|---|---|---|
| POST | `/api/session` | Basic auth → JSON string session id + `vmware-api-session-id` header/cookie |
| GET | `/api/session` | HTTP 200; `x-vmware-session-user` / `x-vmware-session-roles` headers |
| DELETE | `/api/session` | Invalidates the session, clears cookie |
| POST/GET/DELETE | `/rest/com/vmware/cis/session` | Legacy `{ "value": … }` equivalents |
| POST | SOAP `SessionManager.Login` | Returns the same session id; sets `vmware_soap_session` cookie |
| POST | SOAP `SessionManager.Logout` | Deletes the session |

## Highlights

- Sessions are opaque 32-char hex tokens stored in `vsphere_sessions` with a
  **2-hour sliding TTL** — every authenticated call extends `expires_at`.
- The four lab credentials (`vsphere_credentials`, scrypt-hashed) are
  idempotently ensured on first login and by every seed profile
  (`ensure_default_credentials`).
- `require_session` resolves the session from either the
  `vmware-api-session-id` header or cookie; missing/expired → HTTP 401.
- Roles are attached to the session at lookup time
  (`vsphere_credentials.roles`) and drive [Authorization](authz.md).

See [Authentication](../authentication.md) for full request examples.
