旧人发新贴,请高手指教。 项目环境:服务器采用tomcat需要集群
项目需求:客户端采用HTTP请求服务器,不是浏览器访问,而是客户端程序。服务器在客户端请求URL的时候,都会创建一个session,且一个用户登录成功后,只使用登录请求的session作为用户信息对象,但是不能把sessionid返回给客户端,由服务器缓存。
现在问题:
我在昨天一天的时间实现了apache+tomcat集群,最后还发现jdk统一是影响集群的。当我以为就可以解决的时候,发现问题还是有很多。 1. 客户端在登录成功后,用用户id作为唯一key,在寻找他在登录成功创建的session,那么这个session要存在哪里,集群的话,只共享了session,不能共享我自己的Map对象。 ???? 2. 我自己发HTTP请求创建一个MySession(Session),当作是一个map对象,把用户id作为key,value存用户登录成功的session。虽然离我的设想很近了,但是新的问题又出现了,集群的时候,假如2个tomcat,如何保证是自己的MySession是同一个,当其中一台tomcat重启后,怎么获得原来的MySession.??? 3. 当我能够在MySession中用用户id找到他对应的session的时候,怎么把session在激活也就是更新最后访问时间。?? 4. 我最想的就是能否重写tomcat中StandarMananger创建session的类,这样我自己就能完整的管理session。? 不懂发帖,之有一些想法,请各位赐教了。
项目需求:客户端采用HTTP请求服务器,不是浏览器访问,而是客户端程序。服务器在客户端请求URL的时候,都会创建一个session,且一个用户登录成功后,只使用登录请求的session作为用户信息对象,但是不能把sessionid返回给客户端,由服务器缓存。
现在问题:
我在昨天一天的时间实现了apache+tomcat集群,最后还发现jdk统一是影响集群的。当我以为就可以解决的时候,发现问题还是有很多。 1. 客户端在登录成功后,用用户id作为唯一key,在寻找他在登录成功创建的session,那么这个session要存在哪里,集群的话,只共享了session,不能共享我自己的Map对象。 ???? 2. 我自己发HTTP请求创建一个MySession(Session),当作是一个map对象,把用户id作为key,value存用户登录成功的session。虽然离我的设想很近了,但是新的问题又出现了,集群的时候,假如2个tomcat,如何保证是自己的MySession是同一个,当其中一台tomcat重启后,怎么获得原来的MySession.??? 3. 当我能够在MySession中用用户id找到他对应的session的时候,怎么把session在激活也就是更新最后访问时间。?? 4. 我最想的就是能否重写tomcat中StandarMananger创建session的类,这样我自己就能完整的管理session。? 不懂发帖,之有一些想法,请各位赐教了。
不是,手机客户端登录服务器,无法缓存sessionid、cookie等,所以每次到服务器都会有session产生,而服务器就是要保证同一个用户过来,一值使用一个session作为对象处理。
你这个需求有问题,sessionId(或者其它什么唯一的数据来标志)肯定是要返回给客户端的.客户端什么东西都没有,你怎么能确定它是哪个用户?
即使是手机,应该也是可以获取到session的。
这个项目解决方案,还是要从修改手机客户端着手,让这个客户端符合HTTP规范.按你一楼说的需求,是不能实现用户登陆的需求.如果说实现了,一定有问题或者说有漏洞.ps: "手机的消息头中无法存储太大的sessionid",应该不是这样的,无论那个手机的web浏览器都支持这个.....
嗯嗯, 现在基本摸清了里面的实现,按照这样的方式确实实现不了。
所以我找了另外的一种方法,memcached缓存服务器,让tomcat只实现集群,session就不用了,tomcat吧数据都提交到memcached缓存服务器上去,这样给他们相同的key存取就可以了。
至于tomcat集群session,手机是可以带sessionid,原本是想减少流量,通过验证不带sessionid是实现不了的。
谢谢楼上各位的回复,结贴了啊。
这个要看你设置集群的方式,一种是绑定型,就是客户端ip第一次访问的是哪个tomcat,后续就只请求一个tomcat,一种是轮训,按照请求顺序一个请求换一个tomcat实现。
第一可以不需要session共享,但是这样实现的很少。