请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

用公司安排自己做的一个小项目来验证MSM,用的阿里云ECS服务器,但是一直不成功。

我的阿里云ECS是这么几台:

    1)、一台安装了tomcat-a,部署项目;

    2)、一台安装了tomcat-b,部署项目;

    3)、一台安装了memcached,作为缓存服务。

    以上3台端口、安全组均已开通,互相访问均无问题。

##################################

第一次测试:

1、两个tomcat配置都检查了两遍是OK的,启动之后访问页面登录之后也能有session进入到memcached中,tomcat是OK的;

2、memcached能进来值,说明服务器之间通信是OK的;

3、使用MSM管理session的那段配置,确定是no-skity的,本身配置就那么点照搬来改的,也是OK的。


但是,其中一台tomcat登录后,另一台怎么刷新也还是在登录页,直接访问主页也会被拦截器拦截下来因为没有session,看memcached里面有第一台的session;然后第二台我直接登录后,memcached又有了第二个session。

反正就是这俩tomcat没有共享session,memcached也有值,配置也是按照老师的配置来的,不知道还有哪里有问题。

老师有空帮忙看看好吗?困扰我一天多了。

-------------------------------------------------------

第二次测试:

然后我用老师那个test小工程打包部署到服务器上去测试了一下,发现不管怎么刷新页面都是显示“session没有值”,然后看memcached服务器里面每当我刷新一次页面,就会多一个session值。

这是MSM没有配置成功吧,可我配置检查了下,是按照老师的步骤来的啊。o(╥﹏╥)o

-------------------------------------------------------

第三次测试:

2018-7-22 19:00记录:

老师,我又做了一下测试,直接把项目打包部署在本地自己电脑的两个不同端口的tomcat上,启动后访问,发现可以实现session共享,连接的memcached服务器是阿里云的,观察session没问题。

但是我把项目部署到阿里云的两台机器tomcat上之后,访问发现就不行了,一台登录往memcached塞入了session,但是另一台刷新还是拿不到session,打印出来是空的。

这到底是为什么呢?

-------------------------------------------------------

第四次测试:

2018-7-23 01:17记录:

第四次测试,我把两个tomcat全部都放到一台阿里云ECS上了,然后tomcat改成不同端口,部署项目启动,验证,发现session共享成功!

至此,我能确定一个问题了,在同一服务器上不同端口没问题,但是不同服务器就不行,我猜测的可能原因:

1、阿里云ECS还有什么额外的限制,我没有开通某个策略之类的。(目前安全组策略都开通了,服务器上的防火墙也都开了相应的端口。)

2、跨域问题,因为服务器ip不同,所以导致session无法共享,但是memcahed作为第三方缓存服务不就是解决这个问题的吗?

以上,是我这两天在阿里云ECS上部署项目测试MSM的测试过程,希望有遇到过的或者有思路的同学能给点建议,也希望老师百忙之余能帮忙一起看下这个问题。

正在回答

1回答

我大概了解你的问题了,这么认真验证的同学不太多,先给你点个赞,不过这里你有几个误区:

首先,找了一个session机制相关的文章,你可以看一下。

https://www.cnblogs.com/endlessdream/p/4699273.html,在这里着重看一下session和Cookie的关系。

其次,Tomcat集群的目的是让所有的Tomcat共享session空间,当同一个用户访问不同Tomcat的时候可以获得相同的Session内容,注意我标黑的内容。 什么叫同一个用户呢? 就是持有相同sessionId的用户。

为什么你四次实验中,同一台机器不同端口的两次可以成功呢,因为他们持有本地存储的两个相同的sessionId。 到这里你就能理解为什么其他两次实验不成功了。

你的另外两次实验之所以不成功,其实问题就在于账号可能相同,但是没有持有相同的sessionId,所以不能成功。如果想解决这个问题,建议使用类似于jwt之类的token机制,或者你手动传输并存储sessionId,可以达到同样的效果,不过这个就不是Tomcat集群需要解决的问题了。

希望以上的回答对你有帮助

0 回复 有任何疑惑可以回复我~
  • 提问者 fly_烟雨行舟 #1
    谢谢老师,听你这么一说我恍然大悟,确实sessionid不一样,难怪会存两个而没有共享。我找找看用什么办法来解决sessionid的问题,刚好也可以去学习下jwt。
    回复 有任何疑惑可以回复我~ 2018-07-23 10:53:15
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信