sesión de estado del grupo de solución
En un entorno agrupado, las solicitudes podrán ser enviadas a un proceso de servidor diferente hacia arriba, esto conducirá, después de servidor de una multa, mientras que otras tareas se asignan a En el servidor B, sesión de servidor caso A no existe en el servidor en B, permitirá a los usuarios conectarse de nuevo, por lo que la experiencia del usuario no es ciertamente aceptable.
soluciones
- réplica de sesiones (si es un entorno de clúster es demasiado grande, no se recomienda)
- sesión de uso compartido
- Almacenada en la cookie (no se recomienda)
La manera de resolver el uso compartido de sesión
- Entorno de prueba: la primavera de arranque + Redis
- Chrome herramienta de prueba del navegador
- Herramientas de desarrollo de la idea
- herramientas de construcción de proyectos Maven
1: En primer lugar crear el proyecto springboot
<dependencias> <dependency> <groupId> org.springframework.boot </ groupId> <artifactId> resorte de arranque-motor de arranque-Data-redis </ artifactId> </ dependency> <dependency> <groupId> org.springframework.boot < / groupId> <artifactId> resorte de arranque-motor de arranque en la web </ artifactId> </ dependency> <! - sesión de primavera核心依赖-> <dependency> <groupId> org.springframework.session </ groupId> <artifactId> primavera-session-núcleo </ artifactId> </ dependency> <!--spring sesión操作ReDiS依赖-> --spring sesión ReDiS operación depende -> <dependency> <groupId> org.springframework.session </ groupId> <artifactId> primavera-Session-data-Redis </ artifactId> </ dependency> <dependency> <groupId> org.springframework.boot </ groupId> <artifactId> resorte de arranque-motor de arranque-test <artifactId /> <scope> test </ scope> <exclusiones> <exclusión> <groupId> org.junit.vintage </ groupId> <artifactId> junit-vendimia-motor </ artifactId> </ exclusión > </ exclusiones> </ dependency> </ dependencias>
@GetMapping ( " / get " ) pública índice de cuerdas (HttpServletRequest solicitud) { Nombre del objeto = request.getSession () getAttribute (. " Nombre " ); regresar nombre! = nula ? " Éxito " : " falsa " ; } @GetMapping ( " set / " ) pública índice de cuerdas (HttpServletRequest solicitud, HttpServletResponse respuesta) { Nombre del objeto = request.getSession (). GetAttribute ( "); si ( nulo == nombre) request.getSession () setAttribute (. " nombre " , " zs " ); volver " juego de éxito " ; }
Springboot la ejecución de dos proyectos, uno en el puerto 8080, un puerto 8081, entorno de clúster de simulación
8080,8081 puertos de acceso dos proyectos son falsas, no hay descripción de la sesión en este momento
En este punto, después de una sesión valor ajustado manualmente, nueva visita para recibir, de retorno al éxito
De acceso al puerto 8081 del proyecto
Volver éxito, para explicar el éxito de la obtención de la sesión
Hay valor de sesión Redis simplemente depositada, la descripción de sesión para obtener un grupo exitoso.