A web session system provides the programmer with a persistent "bucket" to store objects and data in, which will persist between user transactions. The servlet system specified by the JSDK2.0 specification is limited in a number of ways. Specifically, the specification does not clarify what happens to sessions when the session implementation is restarted (usually the servlet runner). Another annoyance of the JSDK2.0 session system is dealing with multiple implementations of the same specification. The session system may function differently under different servlet environments, making porting to different environments difficult. Specifically the encodeURL function, so critical to cookieless sessions, is often disabled, nonfunctional or not implemented in servlet environments. The apollo servlet system runs in the same space as the servlet itself, which ensures full compatibility across different servlet implementations. The apollo session system also addresses custom serialization, session expiration, session reactivation and distributed sessions across the apollo distributed jini network.