分布式Session的方案

对于单服务来说,session存储不是什么问题,但是对于分布式来说,尤其实现单点登录的系统,登录其中部署在A服务的网页后,那么在同一个浏览器打开部署在B服务器的另一个业务网页也应该能够显示登录,这就是session的共享要解决的问题,
那如何解决session共享的问题呢,大致有几个个方案:
tomcat+redis 或者Spring session+redis,另外还有Nginx方式

1、tomcat + redis

这个方案就是利用tomcat和redis去共享session。sessionid是一个会话的key,浏览器第一次访问服务器会在服务器端生成一个session,有一个sessionid和它对应。
先在Tomcat的lib文件中加入以下依赖

tomcat-redis-session-manager-VERSION.jar
jedis-2.5.2.jar
commons-pool2-2.2.jar

在Tomcat的conf目录中content.xml中配置redis服务:

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />

<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"

    host="{redis.host}"

    port="{redis.port}"

    database="{redis.dbnum}"

    maxInactiveInterval="60"/>

启动Tomcat即可,这样Tomcat就可以将session通过redis共享了

2、 Spring Session + redis

sping session不依赖于Tomcat,,不用再侵入web容器,即使不适用Tomcat部署也能实现session共享。
Spring Session的特性:
1、提供用户session管理的API和实现。
2、提供HttpSession,以中立的方式取代web容器的session。
3、支持集群的session处理。

以下通过springboot的项目去演示操作

先加入依赖 pom.xml文件

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
 
         <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

在属性文件中配置session

 redis:
    host: 
    password:  
 
  session:
    store-type: redis
    timeout: PT30M

在session中设置登录名

public String login(HttpServletRequest request) {
 HttpSession session = request.getSession();
 session.setAttribute("username","admin");
 }

在session中获取登录名

public String getUsername(HttpServletRequest request) {
 HttpSession session = request.getSession();
 session.getAttribute("username");
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值