Backend API. Server-side code: this runs in a Codename One backend, not in the app on the device.

public final class HttpSession

  1. Object
  2. HttpSession

State kept for one client across requests, found again through a cookie.

@PostMapping("/login")
  public void login(HttpServer.Request request, @RequestBody Map body) {
      ...
      HttpSession session = request.getSession(true);
      session.changeSessionId();          // never keep a pre-login id
      session.setAttribute("user", userId);
  }

A session is created only when something asks for one with getSession(true), so a server that never does sets no cookie and keeps nothing. The cookie is HttpOnly, SameSite=Lax and, on a TLS server, Secure; its name, lifetime and store are configured under cn1.session.*.

Attributes live in the SessionStore. The in-memory store keeps any object; the database store keeps what Json can write – strings, numbers, booleans, and maps and lists of those – because it has to read them back in another process.

A session-scoped bean is never written to a store: the server that built it keeps it in memory for as long as the session lives, and runs its destroy methods when the session is invalidated, expires or the server stops. Another instance behind a load balancer builds its own.

Methods

public synchronized String getId()The id the cookie carries.
public synchronized boolean isNew()Whether this session was created by the current request.
public long getCreationTime()
public synchronized long getLastAccessedTime()
public synchronized int getMaxInactiveInterval()Seconds of inactivity after which the session is discarded.
public synchronized void setMaxInactiveInterval(int seconds)
public synchronized Object getAttribute(String name)
public synchronized void setAttribute(String name, Object value)
public synchronized void removeAttribute(String name)
public Object consumeAttribute(String name) throws IOExceptionRemoves and returns an attribute once across every request and server sharing the session store.
public synchronized List getAttributeNames()The attribute names, as a copy.
public synchronized void invalidate()Ends the session: its attributes are dropped and the client’s cookie cleared.
public synchronized boolean isValid()
public String changeSessionId()Gives the session a new id, keeping its attributes, and sends the client the new cookie.

Inherited methods

Method details

getId

public synchronized String getId()
The id the cookie carries. Secret: never log it.

isNew

public synchronized boolean isNew()
Whether this session was created by the current request.

getCreationTime

public long getCreationTime()

getLastAccessedTime

public synchronized long getLastAccessedTime()

getMaxInactiveInterval

public synchronized int getMaxInactiveInterval()
Seconds of inactivity after which the session is discarded.

setMaxInactiveInterval

public synchronized void setMaxInactiveInterval(int seconds)

getAttribute

public synchronized Object getAttribute(String name)

setAttribute

public synchronized void setAttribute(String name, Object value)

removeAttribute

public synchronized void removeAttribute(String name)

consumeAttribute

public Object consumeAttribute(String name) throws IOException
Removes and returns an attribute once across every request and server sharing the session store. A stale request copy cannot consume it again.

Throws

java.io.IOException
if the store cannot perform the atomic operation

getAttributeNames

public synchronized List getAttributeNames()
The attribute names, as a copy.

invalidate

public synchronized void invalidate()
Ends the session: its attributes are dropped and the client’s cookie cleared.

isValid

public synchronized boolean isValid()

changeSessionId

public String changeSessionId()
Gives the session a new id, keeping its attributes, and sends the client the new cookie. Call it when a user signs in: an id a client held before authenticating is one an attacker may have planted.

Returns

the new id