Further communication between the browser and the server starts from scratch. It assumes connections are unreliable and should be made, used, and dropped as quickly as possible. As such, a Web application has to somehow maintain information about connection-related activities. It's difficult to keep the information cached on the server and match it with the correct user. Identifying the user each time a request arrives is challenging because the connection doesn't persist.
Scalability is also difficult when trying to hold onto information for a large number of users.
When many users access your Web application concurrently, you can keep only a limited number of values or objects waiting around between client requests. If you use multiple servers to scale and handle the load, this is especially troublesome. You quickly learn to minimize, or even eliminate, maintaining session state for users. You'll build stateless Web applications that distribute the load across multiple servers when scalability is a concern. Each transaction can be considered separate and distinct, so a particular transaction is free to execute on any available server.