SprinMvc+Redis 实现session共享

一.session共享的应用场景

   每个客户端与服务器交互时生成会话的sessionID是唯一,同个客户端在访问不同的域名:主域名、子域名、跨站点域名或跨服务器域名,会有不同的sessionID,有些应用程序会在session存放用户的状态和信息,同个应用程序的客户端需访问不同的服务端项目,为了使用户在登入后能够在规定时间内保持登入状态,需要进行session共享,多个的项目之间可以使用同个session;

简而言之:不同的服务器之间使用同个用户的session数据

二.Java中的session存储

session的创建:

       服务端程序调用HttpServletRequest的getSession()时,创建java对象session,,服务器会为该Session生成唯一的Session id;通过对象的相关api可以存放数据,响应客户端(携带sessionId),客户端再次请求时会携带id,服务器接受到请求之后就会依据Session id找到相应的Session;

session的存放:

      在服务端session存放在内存中,客户端的Cookie保存sessionID;

session的销毁:

       1)超时 2)程序调用HttpSession.invalidate() 3)程序关闭;

三.实现

1.添加依赖

<dependency>

      <groupId>org.springframework.session</groupId>

      <artifactId>spring-session-data-redis</artifactId>

      <version>1.2.1.RELEASE</version>

</dependency>

<dependency>

       <groupId>redis.clients</groupId>

       <artifactId>jedis</artifactId>

       <version>2.8.1</version>

</dependency>

2.spring的redis 配置

<bean

id="redisHttpSessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
        <property name="maxInactiveIntervalInSeconds" value="1800" />
    </bean>
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle"  value="50" />
        <property name="maxTotal" value="100" />
    </bean>
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy">
        <property name="hostName" value="127.0.0.1" />
        <property name="port" value="6379" />
        <property name="timeout" value="3000" />
        <property name="usePool" value="true" />
        <property name="poolConfig" ref="jedisPoolConfig" />
    </bean>

3.web.xml配置

<filter>

      <filter-name>springSessionRepositoryFilter</filter-name>

      <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

</filter>

<filter-mapping>

      <filter-name>springSessionRepositoryFilter</filter-name>

      <url-pattern>/*</url-pattern>

</filter-mapping>

4.以上配置后已经可以进行session共享了,java程序中在用户登入后可以将用户信息存放在session中,这时redis也就存储了session相关的内容;

demo

程序中:

request.getSession().setAttribute("member", member);//会员信息;

redis:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章