session同步问题,有经验的朋友帮忙解答下.TS!!

lxwyyyz 2011-01-14 09:56:06
要求:一个tomcat下面跑两个项目,如何能够登录一个项目的后,跳转到另外一个项目时,能够同样显示用户已登录。
问题衍化:如何让一个tomcat下面的两个session进行同步控制,也就是说如何让两个应用程序有同一个session。
...全文
307 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxwyyyz 2011-01-16
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 hamiltion 的回复:]
其实你可以用web service试试,你的问题目前是解决了,但是如果两个项目不在一个tomcat上运行,那岂不是还要改啊,web service可以是实现你的需求,而且可以跨服务器,建议你试试!
[/Quote]

两个项目在不在同一个tomcat上面的话,也可以选择集群,webservice确实是一个比较好的解决方案,但是有一点得不得不说的是,两个项目中一个项目的源码不可以修改,所以这个就很纠结~
juaby 2011-01-16
  • 打赏
  • 举报
回复
单点登录吧
耶鲁大学的那个cas不错
Hamiltion 2011-01-15
  • 打赏
  • 举报
回复
其实你可以用web service试试,你的问题目前是解决了,但是如果两个项目不在一个tomcat上运行,那岂不是还要改啊,web service可以是实现你的需求,而且可以跨服务器,建议你试试!
lxwyyyz 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 myzee 的回复:]
tomcat集群就可以做到了
但是访问量大的时候,效率比较低……
[/Quote]

给一个效率比较低的理由?
lxwyyyz 2011-01-14
  • 打赏
  • 举报
回复
蛋疼啊,搜了半天又配置了下,也不行~继续work~
zn85600301 2011-01-14
  • 打赏
  • 举报
回复
单点登录 就可以 不需要共享session
alpha_423 2011-01-14
  • 打赏
  • 举报
回复
单点登录挖。搜“单点登录”
myzee 2011-01-14
  • 打赏
  • 举报
回复
tomcat集群就可以做到了
但是访问量大的时候,效率比较低……
kala197 2011-01-14
  • 打赏
  • 举报
回复
SSL 单点登录 或者 在客户端写cookie 然后再读取
lxwyyyz 2011-01-14
  • 打赏
  • 举报
回复
为了方便大家学习,3天后再结贴,参与者有分
lxwyyyz 2011-01-14
  • 打赏
  • 举报
回复
问题已经解决了,我把最笨的解决方法写下来,给大家看。
(1)首先把tomcat/conf/server.xml文件的HOST标签中添加以下两行文本,暂定需要共享session的项目为test1、test2。
<Context path="/test1" reloadable="true" crossContext="true"></Context>
<Context path="/test2" reloadable="true" crossContext="true"></Context>
(2)在test1项目中添加以下代码
ServletContext ContextA =session.getServletContext();
ContextA.setAttribute("session", session);
(3)从test2项目中取出来另外一个项目的session
ServletContext Context = session.getServletContext();
ServletContext Context1= Context.getContext("/test1");
HttpSession session1 =(HttpSession)Context1.getAttribute("session");
项目test2取出来的session实际上是test1的session

原理:实际上是通过应用服务器唯一的ServletContext对象实现的共享。
备注:真正的单点登录问题很深,有空再研究
henry_fuzr 2011-01-14
  • 打赏
  • 举报
回复
其中一个项目 作为登陆入口 带入returnUrl ,然后利用cookie来共享登陆信息
想喝咖啡的貓 2011-01-14
  • 打赏
  • 举报
回复
我印象中session是不能跨域的,两个不同域名的项目怎么能共享session?
工布之者 2011-01-14
  • 打赏
  • 举报
回复
共享session那么做?
lxwyyyz 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zuxianghuang 的回复:]
不关session的事
[/Quote]
求详解??可能配置SSO不管SESSION的事情,但是我最终想要的结果只是session共享
zuxianghuang 2011-01-14
  • 打赏
  • 举报
回复
不关session的事
lxwyyyz 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zn85600301 的回复:]
引用 5 楼 lxwyyyz 的回复:

有经验做过的朋友帮帮忙~我的这个需求不需要跨服务器,网上的一些配置貌似太复杂了~

给你出个馊主意
你用memcached 把登录过的用户信息 存起来并存个时间戳防止用户异常退出
当用户退出的时候 你从memcached 缓存服务器中删掉用户的信息就行了
memcached 用起来就像是一个长连接的MAP集合 你可以试试
[/Quote]

晚上按你的解决方法试试~问题小纠结,弄懂了之后先满足需求,以后再有空深入
lxwyyyz 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qingyuan18 的回复:]
网上搜“SSO” 单点登录,很多解决方案,有简单的有复杂的,根据你的项目实际选取

通常的做法是一台服务器做为登录的统一终端,用户信息都存放在这台服务器,其他用户的登录验证请求都由该终端代理,多个应用之间session复制保证用户信息的一致性

存放用户信息有多种方式,放数据库或者现在比较流行的LDAP都可以,关键是对外统一的验证和鉴权接口
[/Quote]

没有那么复杂,网上的是有很多方法,但是比较复杂,我的只是在一个tomcat中跨项目共享session,网上的一些介绍比较简单的方法配置了之后也没成功
zn85600301 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lxwyyyz 的回复:]

有经验做过的朋友帮帮忙~我的这个需求不需要跨服务器,网上的一些配置貌似太复杂了~
[/Quote]
给你出个馊主意
你用memcached 把登录过的用户信息 存起来并存个时间戳防止用户异常退出
当用户退出的时候 你从memcached 缓存服务器中删掉用户的信息就行了
memcached 用起来就像是一个长连接的MAP集合 你可以试试
qingyuan18 2011-01-14
  • 打赏
  • 举报
回复
网上搜“SSO” 单点登录,很多解决方案,有简单的有复杂的,根据你的项目实际选取

通常的做法是一台服务器做为登录的统一终端,用户信息都存放在这台服务器,其他用户的登录验证请求都由该终端代理,多个应用之间session复制保证用户信息的一致性

存放用户信息有多种方式,放数据库或者现在比较流行的LDAP都可以,关键是对外统一的验证和鉴权接口
加载更多回复(4)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧