Hacker DirectoryHacker Directory

WEB / WEB-13.01

Session identifiers and Browser transport

Inspect how a small Browser-carried handle binds to a verified server identity through creation and lookup.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mechanism

Read every scenario without motion

Known handle

  1. The next request is prepared

    The Browser prepares input sid-duru-fixture for this case. sid-duru-fixture is a teaching alias; its appearance does not establish a subject or tenant. The request has not reached the Application.

    Browser · cookie jar
    sid-duru-fixture
    Application · session resolver
    Request not received
    Same process · trusted record
    Active record: Duru / Atlas
  2. The session request arrived

    The Application received the request. Cookie presence supplies transport input only; the Browser waits. The trusted record is a logical component in the same application process.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Handle received; lookup pending
    Same process · trusted record
    Active record: Duru / Atlas
  3. The trusted record was evaluated

    The recognized handle resolves to the existing active record. Duru and Atlas come from the server record, not the alias text or a client role assertion.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Accepted: Duru / Atlas
    Same process · trusted record
    Active record: Duru / Atlas
  4. The resource boundary remains separate

    Even a recognized session does not evaluate object/action permission for a particular book here. Without a trusted subject, authenticated resource processing is withheld; no protected body is produced.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Session accepted; resource policy required
    Same process · trusted record
    Active record: Duru / Atlas
  5. The check outcome is prepared

    The Application prepares accepted / trusted_active_record. The Browser has not received it yet. SessionRef serves correlation only; the raw handle is not shown in the illustrated response or general logs.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Response ready: trusted_active_record
    Same process · trusted record
    Active record: Duru / Atlas
  6. The session outcome reached the Browser

    Only now does the Browser know the session-check outcome. This response adds no book body, resource grant, password/MFA verification or identifier-entropy measurement.

    Browser · cookie jar
    Session accepted; resource permission separate
    Application · session resolver
    Response ready: trusted_active_record
    Same process · trusted record
    Active record: Duru / Atlas

Handle absent

  1. The next request is prepared

    In this case the Browser prepares a request without a Cookie handle. The Application has not received it; the existing Duru/Atlas record does not establish an authenticated subject for this request without a handle.

    Browser · cookie jar
    No Cookie
    Application · session resolver
    Request not received
    Same process · trusted record
    Active record: Duru / Atlas
  2. The session request arrived

    The Application received the request. Cookie presence supplies transport input only; the Browser waits. The trusted record is a logical component in the same application process.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    No Cookie; no lookup expected
    Same process · trusted record
    Active record: Duru / Atlas
  3. The trusted record was evaluated

    Without a handle, lookup is not performed. Subject, tenant and sessionRef remain null; a client assertion does not create an authenticated record.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Rejected: no_handle; subject=null
    Same process · trusted record
    Active record: Duru / Atlas
  4. The resource boundary remains separate

    Even a recognized session does not evaluate object/action permission for a particular book here. Without a trusted subject, authenticated resource processing is withheld; no protected body is produced.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Authenticated processing withheld
    Same process · trusted record
    Active record: Duru / Atlas
  5. The check outcome is prepared

    The Application prepares rejected / no_handle. The Browser has not received it yet. SessionRef serves correlation only; the raw handle is not shown in the illustrated response or general logs.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Response ready: no_handle
    Same process · trusted record
    Active record: Duru / Atlas
  6. The session outcome reached the Browser

    Only now does the Browser know the session-check outcome. This response adds no book body, resource grant, password/MFA verification or identifier-entropy measurement.

    Browser · cookie jar
    Session rejected; subject=null
    Application · session resolver
    Response ready: no_handle
    Same process · trusted record
    Active record: Duru / Atlas

Unknown handle

  1. The next request is prepared

    The Browser prepares input unknown-fixture-label for this case. sid-duru-fixture is a teaching alias; its appearance does not establish a subject or tenant. The request has not reached the Application.

    Browser · cookie jar
    unknown-fixture-label
    Application · session resolver
    Request not received
    Same process · trusted record
    Active record: Duru / Atlas
  2. The session request arrived

    The Application received the request. Cookie presence supplies transport input only; the Browser waits. The trusted record is a logical component in the same application process.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Handle received; lookup pending
    Same process · trusted record
    Active record: Duru / Atlas
  3. The trusted record was evaluated

    Lookup returns not_found. The existing Duru record is not bound to the unknown alias; subject, tenant and sessionRef remain null and no record is created.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Rejected: no_trusted_record; subject=null
    Same process · trusted record
    Active record: Duru / Atlas
  4. The resource boundary remains separate

    Even a recognized session does not evaluate object/action permission for a particular book here. Without a trusted subject, authenticated resource processing is withheld; no protected body is produced.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Authenticated processing withheld
    Same process · trusted record
    Active record: Duru / Atlas
  5. The check outcome is prepared

    The Application prepares rejected / no_trusted_record. The Browser has not received it yet. SessionRef serves correlation only; the raw handle is not shown in the illustrated response or general logs.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Response ready: no_trusted_record
    Same process · trusted record
    Active record: Duru / Atlas
  6. The session outcome reached the Browser

    Only now does the Browser know the session-check outcome. This response adds no book body, resource grant, password/MFA verification or identifier-entropy measurement.

    Browser · cookie jar
    Session rejected; subject=null
    Application · session resolver
    Response ready: no_trusted_record
    Same process · trusted record
    Active record: Duru / Atlas

Creation trace

  1. The identity precondition is supplied

    For creationTrace seq=1, identityVerified=true and the Duru/Atlas precondition are supplied. No real password or MFA check runs here; the Browser has no new handle yet.

    Browser · cookie jar
    No new handle
    Application · session resolver
    Verified identity supplied
    Same process · trusted record
    No new binding
  2. The server binding is created

    At seq=2, record_created binds ledger-duru to Duru/Atlas context. Application and record are logical components within the same process; local creation is not a network message.

    Browser · cookie jar
    No new handle
    Application · session resolver
    Set-Cookie can be prepared
    Same process · trusted record
    ledger-duru: Duru / Atlas; active
  3. The Set-Cookie instruction is prepared

    The Application prepares the illustrated __Host-hd_session header. At the seq=3 sending snapshot, browserHasNewHandle=false remains; server binding is not automatically copied to the Browser.

    Browser · cookie jar
    No new handle
    Application · session resolver
    Set-Cookie ready; no receipt
    Same process · trusted record
    ledger-duru: Duru / Atlas; active
  4. The cookie response reached the Browser

    The header reached the Browser. In this selected example, Browser cookie policy accepts storage; at seq=4 cookie_arrived, browserHasNewHandle=true. HttpOnly does not require frontend header reading or script access.

    Browser · cookie jar
    New handle in jar; identity not in cookie
    Application · session resolver
    Instruction sent
    Same process · trusted record
    ledger-duru: Duru / Atlas; active
  5. The later Cookie request is ready

    In an eligible same-origin context, the Browser selects the new handle for the later Cookie request. Selection depends on lifetime, scope and Browser policy; it grants no resource permission.

    Browser · cookie jar
    Cookie input prepared
    Application · session resolver
    Later request not received
    Same process · trusted record
    ledger-duru: Duru / Atlas; active
  6. The later request reached the Application

    Cookie input reached the Application; the Browser awaits the check outcome. Handle transport does not itself establish a trusted subject; server lookup is required.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Lookup pending
    Same process · trusted record
    ledger-duru: Duru / Atlas; active
  7. The subject is resolved from the server record

    The active record supplies the Duru/Atlas subject. A check outcome can be prepared; book object/action policy remains separate. The Browser has not learned this result yet.

    Browser · cookie jar
    Awaiting check outcome
    Application · session resolver
    Accepted check response ready
    Same process · trusted record
    ledger-duru: Duru / Atlas; active
  8. The binding outcome reached the Browser

    The Browser received the accepted session-check result. The trace separates creation, cookie receipt and lookup; no stage alone proves book-resource permission or real credential verification.

    Browser · cookie jar
    Session accepted; resource policy separate
    Application · session resolver
    Accepted check response ready
    Same process · trusted record
    ledger-duru: Duru / Atlas; active

ACTORS · STATE · DATA FLOW

How is login bound to the next request?

Duru signs in to the Atlas library and then opens another book page. Where does the later request obtain its authenticated subject? Sending the text “Duru” on each page is not identity evidence. The Application establishes a controlled binding between an earlier verified identity and later requests.

This lesson uses an opaque server-side session model. The Browser carries a small handle, while the server record identifies its identity, authentication state and lifecycle. A session is the managed lifetime of that binding. Cookie is our selected transport mechanism; a cookie and a session are different objects.

The identifier is a handle to a record, not the identity itself

sid-duru-fixture is an instructional alias pointing to Duru’s authenticated record, not a usable credential. It does not encode “Duru” or “Atlas.” Store lookup supplies that meaning; a Browser role or tenant assertion does not establish it.

The audit sessionRef=ledger-duru has another purpose: correlating events without secrets. The Application does not accept it for authentication. Separate the Browser handle, store lookup/verifier representation and audit reference; calling all of them session IDs can hide their different roles.

An identity may have sessions on multiple Browsers/devices. Handles independent of identity allow separate generations and lifetimes. A valid record does not permit every book resource; authorization follows as a separate decision.

Creation starts from a trusted identity result

The Application first verifies identity through its trusted authentication process. identityVerified=true is a supplied precondition in this fixture, not a claim that real password/MFA verification ran. The server generates a handle using its session mechanism and binds its own Duru/Atlas context to the authenticated record.

After preparing the store record, the Application sends Set-Cookie. The Browser does not have the new handle before response arrival. Once it accepts storage, a later eligible request can carry the handle in Cookie. Server creation and Browser receipt remain separate state changes.

A session can also hold anonymous state, but giving an anonymous handle identity authority requires a distinct transition. WEB-13.03 covers login/privilege rotation and previous-generation acceptance. This lesson focuses creation and binding rather than duplicating lifecycle detail.

Entropy is not string length

A production identifier must be unpredictable. Prefer an appropriate framework’s session generation; if custom generation is necessary, OWASP recommends a CSPRNG with at least 128 bits and uniqueness checks. This is not one universal policy for every token type.

Entropy differs from visible character count. A fixed prefix, account name or counter can add length without the same amount of randomness. Encoding changes representation. Keeping meaningful user/tenant data out of the identifier also reduces disclosure and mistaken authority interpretation.

The fixture’s fixed sid-duru-fixture and SYNTHETIC_OPAQUE_HANDLE values are deliberately nonrandom. They do not measure production entropy, collision probability or cryptographic strength. We follow ownership and lookup rather than distributing real credentials.

The Browser carries the handle; scripts need not read it

The synthetic HTTPS response shows __Host-hd_session=SYNTHETIC_OPAQUE_HANDLE; Path=/; Secure; HttpOnly; SameSite=Lax. An eligible Browser includes this cookie on suitable requests. Frontend code does not need to read its value through document.cookie and manually construct a header for this flow.

WEB-12.02 develops inclusion rules. An eligible cookie can accompany a same-origin fetch; cross-origin fetch separately considers credentials mode and Browser/SameSite policy. HttpOnly can hide the handle from scripts without excluding it from eligible requests. Do not generalize this to all cross-site requests.

Putting session handles in URLs, general diagnostic logs or shared screenshots spreads credentials to unnecessary surfaces. Observe cookie names, scope/flags and noncredential sessionRef instead of raw values. Good transport does not remove the Application’s acceptance checks.

Binding is checked again when the request arrives

The Application takes the supplied handle from the designated exchange mechanism. This model accepts no URL fallback or arbitrary client field. If the recognized record is active and valid, its server-owned Duru/Atlas context supplies an authenticated subject for subsequent resource policy.

A missing handle creates no subject. An unknown handle also does not invent an authenticated record. Both rejections can be benign: Browser policy may omit the cookie, or earlier client state may refer to a removed record. Different reasons do not create identity evidence.

A real store may use hashed/verifier or other lookup representations. Drawing handle→record does not claim the raw token is stored verbatim in a database. WEB-13.02 covers store concurrency, TTL and distributed consistency; WEB-13.03 covers expiry/logout transitions.

2. Red · Trust & Impact

Read every scenario without motion

Known handle

  1. Handle transport is ready

    The browser carries alias sid-duru-fixture for this inert branch. It is not a usable credential; subject or tenant information is not inferred from its appearance.

    Browser
    sid-duru-fixture ready
    Session resolver
    Lookup not performed
    Resource gate
    No resource permission
  2. The session check reached the application

    An ordinary check reached the application. Cookie transport supplies input only; establishing an authenticated subject requires the defined server binding mechanism.

    Browser
    Awaiting check outcome
    Session resolver
    Handle received; lookup pending
    Resource gate
    No resource permission
  3. The trusted binding was resolved

    The recognized alias resolves to active record ledger-duru. Subject Duru and tenant Atlas come from the server record, not a name supplied by the browser.

    Browser
    Awaiting check outcome
    Session resolver
    Accepted: Duru / Atlas
    Resource gate
    No resource permission
  4. The resource decision was kept separate

    Session acceptance establishes Duru/Atlas context, but does not establish object authorization for a particular book action.

    Browser
    Awaiting check outcome
    Session resolver
    Session accepted
    Resource gate
    Authorization remains required
  5. The check outcome was prepared

    The application prepares accepted / trusted_active_record. Observation uses a noncredential audit reference rather than copying a raw handle into general logs.

    Browser
    Awaiting check outcome
    Session resolver
    Session-check outcome ready
    Resource gate
    Object outcome not shown
  6. The binding outcome reached the browser

    The browser received the accepted session outcome. The scene adds no resource-body delivery, actual login or entropy measurement; the alias only illustrates the binding boundary.

    Browser
    Session accepted
    Session resolver
    Session-check outcome ready
    Resource gate
    No resource-body evidence

Unknown handle

  1. Handle transport is ready

    The browser carries alias unknown-fixture-label for this inert branch. It is not a usable credential; subject or tenant information is not inferred from its appearance.

    Browser
    unknown-fixture-label ready
    Session resolver
    Lookup not performed
    Resource gate
    No resource permission
  2. The session check reached the application

    An ordinary check reached the application. Cookie transport supplies input only; establishing an authenticated subject requires the defined server binding mechanism.

    Browser
    Awaiting check outcome
    Session resolver
    Handle received; lookup pending
    Resource gate
    No resource permission
  3. Session binding not found

    Lookup returns not_found. No authenticated record is created for an unknown alias; subject, tenant and sessionRef remain null.

    Browser
    Awaiting check outcome
    Session resolver
    Rejected: no_trusted_record
    Resource gate
    No resource permission
  4. The resource decision was kept separate

    Without a trusted subject, authenticated resource processing does not proceed in this branch. An unknown handle alone is not evidence of malicious intent.

    Browser
    Awaiting check outcome
    Session resolver
    Session rejected
    Resource gate
    Authenticated processing withheld
  5. The check outcome was prepared

    The application prepares rejected / no_trusted_record. In this branch subject, tenant and sessionRef remain null; the observation is identified by case=unknown. A raw handle is not copied into general logs.

    Browser
    Awaiting check outcome
    Session resolver
    Session-check outcome ready
    Resource gate
    Object outcome not shown
  6. The binding outcome reached the browser

    The browser received the rejected session outcome. The scene adds no resource-body delivery, actual login or entropy measurement; the alias only illustrates the binding boundary.

    Browser
    Session rejected
    Session resolver
    Session-check outcome ready
    Resource gate
    No resource-body evidence

ASSUMPTION · BOUNDARY · CONTROL

Server binding gives a handle its authority

A valid handle normally reaches authenticated context established earlier by the server. The broken assumption is that client-supplied subject/role text or an audit reference can establish equivalent authority. A well-shaped identifier is not authentication evidence.

Validate the input through the designated session mechanism and derive the subject from a trusted record. Impact remains bounded by that session’s identity and permissions. Our unknown/missing cases are supplied benign selectors, not instructions for trying real identifiers or targeting another system.

Unpredictability and confidentiality address different risks

High entropy does not magically protect a disclosed value, and HTTPS does not add randomness to weak generation. Generation, transport, Browser/script access and log hygiene are different control surfaces.

Exposure of a bearer handle can increase risk to authenticated actions, while action impact depends on application policy and additional checks. Making a string longer is not the full durable control: assess the session mechanism, constrained transport, store access and invalidation together. WEB-13.03 develops rotation/expiry.

3. Blue · Secure development & defense

Read every scenario without motion

Arrival record

  1. The creation-trace scope was selected

    This branch reviews all four creationTrace records together. Coverage is preserved when assessing what the browser could have learned.

    Creation records
    binding-create: seq 1–4
    Binding review
    Creation not correlated
    Receipt conclusion
    Jar evidence unknown
  2. The identity precondition was separated

    identity_verified is a supplied trusted precondition here. Presence of seq 1 does not mean that an actual password or MFA operation ran in this scene.

    Creation records
    binding-create: seq 1–4
    Binding review
    seq 1: identity_verified
    Receipt conclusion
    Jar evidence unknown
  3. Store creation was correlated

    Seq 2 record_created correlates ledger-duru with the same requestId=binding-create. The audit sessionRef is neither a browser handle nor an authentication credential.

    Creation records
    binding-create: seq 1–4
    Binding review
    seq 2: ledger-duru created
    Receipt conclusion
    Jar evidence unknown
  4. Sending was not treated as receipt

    At seq 3 set_cookie_sent, browserHasNewHandle=false. The server sent an instruction; browser acceptance and storage state cannot be inferred from that event.

    Creation records
    binding-create: seq 1–4
    Binding review
    seq 3: instruction sent
    Receipt conclusion
    Receipt not yet established
  5. Arrival coverage was assessed

    Seq 4 records cookie_arrived and browserHasNewHandle=true. Arrival is known within this fixture; a later lookup or resource permission is not yet shown.

    Creation records
    binding-create: seq 1–4
    Binding review
    Creation and sending known
    Receipt conclusion
    Arrival known
  6. Binding evidence was not broadened

    Creation, browser receipt and accepted lookup are separate evidence. This trace explains receipt, but does not complete identity or object outcomes for a later protected request.

    Creation records
    binding-create: seq 1–4
    Binding review
    SessionRef is correlation only
    Receipt conclusion
    Lookup evidence remains required

Receipt missing

  1. The creation-trace scope was selected

    This branch reviews only the first three creationTrace records. Coverage is preserved when assessing what the browser could have learned.

    Creation records
    binding-create: review of seq 1–3
    Binding review
    Creation not correlated
    Receipt conclusion
    Jar evidence unknown
  2. The identity precondition was separated

    identity_verified is a supplied trusted precondition here. Presence of seq 1 does not mean that an actual password or MFA operation ran in this scene.

    Creation records
    binding-create: review of seq 1–3
    Binding review
    seq 1: identity_verified
    Receipt conclusion
    Jar evidence unknown
  3. Store creation was correlated

    Seq 2 record_created correlates ledger-duru with the same requestId=binding-create. The audit sessionRef is neither a browser handle nor an authentication credential.

    Creation records
    binding-create: review of seq 1–3
    Binding review
    seq 2: ledger-duru created
    Receipt conclusion
    Jar evidence unknown
  4. Sending was not treated as receipt

    At seq 3 set_cookie_sent, browserHasNewHandle=false. The server sent an instruction; browser acceptance and storage state cannot be inferred from that event.

    Creation records
    binding-create: review of seq 1–3
    Binding review
    seq 3: instruction sent
    Receipt conclusion
    Receipt not yet established
  5. Arrival coverage was assessed

    This review contains only seq 1–3, so cookie_arrived is not included. That does not prove arrival never occurred; the supplied receipt evidence is incomplete.

    Creation records
    binding-create: review of seq 1–3
    Binding review
    Creation and sending known
    Receipt conclusion
    UNKNOWN: receipt
  6. Binding evidence was not broadened

    Creation, browser receipt and accepted lookup are separate evidence. Missing receipt does not justify one success or failure verdict; jar and check observations must be obtained separately.

    Creation records
    binding-create: review of seq 1–3
    Binding review
    SessionRef is correlation only
    Receipt conclusion
    UNKNOWN: browser receipt

IMPLEMENTATION · SECURITY CONTROL · VERIFICATION

Creation, delivery and lookup need separate evidence

Creation evidence describes server-record preparation; Set-Cookie describes a sent instruction; jar inspection describes Browser storage; a protected decision describes lookup. Observing one does not prove completion of all the others.

seq, event, sessionRef, requestId, result and reason are application-owned teaching fields, not genuine framework event names or an existing SIEM schema. A fixture input named identityVerified does not validate real credential checking.

Correlate lookup decisions without session values

Audit uses a separate sessionRef instead of the raw handle. Missing and unknown cases retain a null subject; inferring userId from cookie presence would be incorrect correlation. Missing can reflect Browser policy, and unknown can reflect store/cache lifecycle; neither is automatically an alarm.

XPath /sessionObservations/check[@result="accepted" and @subject=""] searches the fixture XML for accepted observations with no subject. The supplied three cases should return none. An integrity fixture adding an accepted/empty-subject row should return it; that is not a real-world authentication-bypass test.

A missing log or incorrect sessionRef join is not enough to conclude that binding is absent. Validate how creation and lookup paths generate references, deliver events and map schemas in the real application.

Record-based identity, separate resource policy

In manual observation, compare the creation identity, noncredential Browser metadata and the resolved subject of an accepted check. If the record says Duru/Atlas while the UI shows another tenant, inspect the state source that changed; do not “fix” the example by deriving identity from client fields.

Make the framework session mechanism and accepted exchange surface explicit, without undocumented automatic URL fallbacks. Keep sensitive values out of observation exports. Design store availability failure so protected processing does not assume authentication, while retaining an understandable user fallback.

NOW APPLY IT TO THE CASE

Where does carrying a browser handle establish identity?

sid-duru-fixture is a teaching alias only. Duru/Atlas binding is resolved from the server record; creation, receipt and lookup are separate observations.

Find separate observations for the case handle, server binding and session lifetime. Does a retained browser value establish current server admission by itself?

Open the related case file ↗

READ THE EXAMPLE TOGETHER

Opaque handle, trusted record and audit reference: three separate fields

Select a field and examine what it supports and where the evidence ends.

Read the raw artifact and field explanations
{
  "authenticationPrecondition": {
    "identityVerified": true,
    "subject": "Duru",
    "tenant": "Atlas",
    "scope": "supplied trusted-event fixture; no password/MFA implementation"
  },
  "creationTrace": [
    {
      "seq": 1,
      "event": "identity_verified",
      "requestId": "binding-create",
      "subject": "Duru"
    },
    {
      "seq": 2,
      "event": "record_created",
      "requestId": "binding-create",
      "sessionRef": "ledger-duru"
    },
    {
      "seq": 3,
      "event": "set_cookie_sent",
      "requestId": "binding-create",
      "browserHasNewHandle": false
    },
    {
      "seq": 4,
      "event": "cookie_arrived",
      "requestId": "binding-create",
      "browserHasNewHandle": true
    }
  ],
  "setCookieIllustration": "__Host-hd_session=SYNTHETIC_OPAQUE_HANDLE; Path=/; Secure; HttpOnly; SameSite=Lax",
  "handleAlias": "sid-duru-fixture",
  "storeRecord": {
    "sessionRef": "ledger-duru",
    "subject": "Duru",
    "tenant": "Atlas",
    "authenticationState": "authenticated",
    "state": "active",
    "handleRepresentation": "omitted; implementation-dependent lookup/verifier",
    "createdAt_s": 10,
    "validAt_s": 70
  },
  "cases": [
    {
      "id": "recognized",
      "suppliedHandleLabel": "sid-duru-fixture",
      "lookup": "recognized",
      "result": "accepted",
      "subject": "Duru",
      "tenant": "Atlas",
      "sessionRef": "ledger-duru",
      "reason": "trusted_active_record"
    },
    {
      "id": "missing",
      "suppliedHandleLabel": null,
      "lookup": "not_performed",
      "result": "rejected",
      "subject": null,
      "tenant": null,
      "sessionRef": null,
      "reason": "no_handle"
    },
    {
      "id": "unknown",
      "suppliedHandleLabel": "unknown-fixture-label",
      "lookup": "not_found",
      "result": "rejected",
      "subject": null,
      "tenant": null,
      "sessionRef": null,
      "reason": "no_trusted_record"
    }
  ],
  "observationXML": "<sessionObservations><check case=\"recognized\" result=\"accepted\" subject=\"Duru\" sessionRef=\"ledger-duru\"/><check case=\"missing\" result=\"rejected\" subject=\"\"/><check case=\"unknown\" result=\"rejected\" subject=\"\"/></sessionObservations>",
  "localXPath": "/sessionObservations/check[@result=\"accepted\" and @subject=\"\"]",
  "expectedSelectedCases": []
}
authenticationPrecondition
A previously verified identity fixture; client username text does not establish authenticated state.
handleAlias / SYNTHETIC_OPAQUE_HANDLE
Fixed secrets-free instructional labels, not random generation or working credentials.
storeRecord.subject / tenant
Application-owned binding context, not arbitrary cookie identity claims.
storeRecord.handleRepresentation
No assumption of raw token database storage; lookup/verifier implementation is outside the drawing.
sessionRef
Audit correlation reference, never accepted as a credential substitute.
creationTrace.seq / browserHasNewHandle
Separate server-record creation, sent response and Browser arrival.
cases.lookup / result / reason
Supplied recognized/missing/unknown cases, not session enumeration results.
observationXML / localXPath
Synthetic accepted/subject consistency selection, not a complete verifier or multi-host correlation.

The fixture runs no password/MFA check, token generator, verifier or real store. Fixed aliases provide no access to real identities. Cookie flags are an inert HTTPS example; Browser and lab runtime evidence is separate.

Two reality checks

A longer-looking session identifier necessarily has higher entropy.

Fixed or predictable parts can add length without equivalent randomness. Assess the generation source and effective entropy.

Sending a session cookie proves request identity and permission to every resource.

The server first checks binding to a trusted valid record. Resource/action authorization is a separate subsequent decision.

YOUR TURN

Work through this story.

Predict the outcome, find the evidence boundary, and explain it in your own words.

We are at seq=3 in creationTrace. The set_cookie_sent record explicitly shows browserHasNewHandle=false. At this stage, has the Browser stored the new handle?

  1. No. At this stage browserHasNewHandle=false.
  2. Yes; browser state changes as soon as the server prepares a header.
Read the explained answer

No. At this stage browserHasNewHandle=false. — The sent snapshot in CreationTrace does not change remote jar state; cookie_arrived is the later completed boundary.

Are the sid alias and ledger-duru reference the same kind of credential?

Selected lesson artifact fields; teaching example

handleAlias
sid-duru-fixture
storeRecord.sessionRef
ledger-duru
storeRecord.authenticationState
authenticated
  1. Putting the ledger reference into a Cookie establishes the same authenticated binding.
  2. No; the ledger reference is for observation correlation, not a browser handle.
Read the explained answer

No; the ledger reference is for observation correlation, not a browser handle. — SessionRef is the trusted record audit reference; the actual handle representation is omitted and implementation-dependent.

Why is an unknown supplied handle rejected with subject=null, and why does an accepted session still not provide resource permission?

Read the explained answer

No trusted record exists for the unknown label, so Duru identity is not created from a client assertion. The recognized case binds to an active trusted record, but object/action/context authorization remains separate. AuthenticationPrecondition is a supplied trusted event here, not proof of password/MFA testing.

□ I did not create identity from an unknown handle.

□ I separated session recognition from resource permission.

Open the application console · request / response / browser
Also open request, URL, cookie and DOM examples

Sources and scope