Dans les applications Web à grande échelle, la gestion des sessions est très importante, qui ne peut pas être satisfaite par le stockage sur une seule machine.
Il existe généralement les méthodes suivantes :
Persistance des sessions dans la base de données. Mais l'inconvénient est que le coût de lecture et d'écriture est trop élevé.
Dé-session, comme le stockage des informations dans les cookies. Mais l'inconvénient est que la taille est limitée et. dangereux.
3. Stockez la session dans une base de données nosql distribuée, telle que Redis.
Ajoutez la dépendance principale maven spring-session-data-redis
<!--基于redis的分布式session存储--> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
Configurez les propriétés de connexion Redis dans le fichier application.properties
###### Redis config start ###### spring.redis.database=0 spring.redis.host=192.168.41.60 spring.redis.port=6379 spring.redis.password= spring.redis.pool.max-active=20 spring.redis.pool.max-wait=-1 spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 spring.redis.timeout=0 ###### Redis config end ######
@Configuration @EnableRedisHttpSession(redisNamespace = "mysession",maxInactiveIntervalInSeconds = 60*60*24) public class SessionConfig
Le code source de l'annotation @EnableRedisHttpSession est le suivant. Vous pouvez voir que trois paramètres peuvent être configurés :
maxInactiveIntervalInSeconds : délai d'expiration des données en session (pas de session dans Redis) Délai d'expiration)
Dans ma configuration, j'ai spécifié un espace de noms nommé "mysession" pour identifier l'application actuelle
redisFlushMode : la façon dont Redis enregistre le session, le ON_SAVE
par défaut en a deux. One way : IMMEDIATE : Enregistrez immédiatement une fois la session créée. ON_SAVE : Il ne sera pas enregistré lors de la création de la session, mais il sera enregistré lors de l'ajout de données à la session
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @Target({ java.lang.annotation.ElementType.TYPE }) @Documented @Import(RedisHttpSessionConfiguration.class) @Configuration public @interface EnableRedisHttpSession int maxInactiveIntervalInSeconds() default 1800; String redisNamespace() default ""; RedisFlushMode redisFlushMode() default
Ecrire un contrôleur
@RestController public class HelloController @RequestMapping("/hello/{username}") public String hello(HttpSession session, @PathVariable(value = "username") String username) { session.setAttribute("username", username); return "保存session到Redis成功"; } @RequestMapping("/getName") public String getUsername(HttpSession session) { String username = (String) session.getAttribute("username"); return
Lorsque le navigateur accède au lien http://localhost:8080/hello/admin, la méthode
hello recevra les paramètres passés par le navigateur et les enregistrera dans la session, puis enregistrez la session Enregistrer dans Redis
En affichant les informations dans Redis, vous pouvez voir les informations suivantes :
Le spring:session est automatiquement ajouté et l'espace de noms mysession que nous avons créé se trouve sous ce répertoire par défaut
Ensuite, nous visitons http://localhost:8080/getName, vous pouvez voir que le navigateur affichera l'administrateur que nous venons d'enregistrer dans la session
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!