[[web.spring-session]]
= Spring Session

Spring Boot provides {url-spring-session-site}[Spring Session] auto-configuration for a wide range of data stores.
When building a servlet web application, the following stores can be auto-configured:

* Redis
* JDBC
* Hazelcast
* MongoDB

Additionally, {url-spring-boot-for-apache-geode-site}[Spring Boot for Apache Geode] provides {url-spring-boot-for-apache-geode-docs}#geode-session[auto-configuration for using Apache Geode as a session store].

The servlet auto-configuration replaces the need to use `@Enable*HttpSession`.

If a single Spring Session module is present on the classpath, Spring Boot uses that store implementation automatically.
If you have more than one implementation, Spring Boot uses the following order for choosing a specific implementation:

. Redis
. JDBC
. Hazelcast
. MongoDB
. If none of Redis, JDBC, Hazelcast and MongoDB are available, we do not configure a javadoc:org.springframework.session.SessionRepository[].


When building a reactive web application, the following stores can be auto-configured:

* Redis
* MongoDB

The reactive auto-configuration replaces the need to use `@Enable*WebSession`.

Similar to the servlet configuration, if you have more than one implementation, Spring Boot uses the following order for choosing a specific implementation:

. Redis
. MongoDB
. If neither Redis nor MongoDB are available, we do not configure a javadoc:org.springframework.session.ReactiveSessionRepository[].


Each store has specific additional settings.
For instance, it is possible to customize the name of the table for the JDBC store, as shown in the following example:

[configprops,yaml]
----
spring:
  session:
    jdbc:
      table-name: "SESSIONS"
----

For setting the timeout of the session you can use the configprop:spring.session.timeout[] property.
If that property is not set with a servlet web application, the auto-configuration falls back to the value of configprop:server.servlet.session.timeout[].


You can take control over Spring Session's configuration using `@Enable*HttpSession` (servlet) or `@Enable*WebSession` (reactive).
This will cause the auto-configuration to back off.
Spring Session can then be configured using the annotation's attributes rather than the previously described configuration properties.
