IFrame Portlet的session丢失问题解决
2010-04-30 12:39
295 查看
Liferay额外研究(三):IFrame Portlet的session丢失问题解决
Liferay提供了一种非常的简单web应用整合和单点登陆的方式:Iframe Portlet。利用Iframe
Portlet可以很容易将一个已经存在的web应用纳入,并且支持利用form的post或get方式,实现用户的登陆。
对于Liferay这样的机制没有任何问题,实现的也非常巧妙;但是对于很多web应用系统来说,使用Liferay
IFrame
Portlet的form方式实现登陆后,虽然可以成功登陆,但是在显示的新页面中,却发现用户信息丢失,或者更准确的说,是session丢失。
其实,这种现象跟Liferay关系不大,而是应用本身决定的。事实上,所有的portal context的iframe
方式,都有可能发生这个情况。
因为很多web应用系统,在执行Login操作的后,习惯性的选择redirect操作,这样会强制浏览器中的显示地址变更为转移的地址。事实上这是个很
正确的做法,在正常境况下,不会有任何问题,而且还可以很好的防止页面刷新等所带来的问题。
但是在Liferay的IFrame
Portlet中,web应用这样的Redirect操作,造成了调转到新页面后,session变成了一个新的,从而造成放置在原有session中的
login user信息丢失。
跟踪并做了如下的一组测试(Liferay和webapp在不同的JVM环境下):
从上面可以明显看出来,redirect之后,web应用的新页面产生了新的sessionid
解决这个问题,有两种方式,这两种方式都依赖于被liferay portlet纳入的web应用自身。
方式一:Login操作后,不采用Redirect方式,而是Dispatcher方式。
方式二:Login操作后,依然采用redirect方式,但将当前的jsessionid赋予新的页面。
Dispatcher方式:
Redirect方式(保持同一个session):
有一种情况下,无所谓是否采用Redirect方式,这就是在Liferay和webapp在同一个JVM环境下。
Liferay提供了一种非常的简单web应用整合和单点登陆的方式:Iframe Portlet。利用Iframe
Portlet可以很容易将一个已经存在的web应用纳入,并且支持利用form的post或get方式,实现用户的登陆。
对于Liferay这样的机制没有任何问题,实现的也非常巧妙;但是对于很多web应用系统来说,使用Liferay
IFrame
Portlet的form方式实现登陆后,虽然可以成功登陆,但是在显示的新页面中,却发现用户信息丢失,或者更准确的说,是session丢失。
其实,这种现象跟Liferay关系不大,而是应用本身决定的。事实上,所有的portal context的iframe
方式,都有可能发生这个情况。
因为很多web应用系统,在执行Login操作的后,习惯性的选择redirect操作,这样会强制浏览器中的显示地址变更为转移的地址。事实上这是个很
正确的做法,在正常境况下,不会有任何问题,而且还可以很好的防止页面刷新等所带来的问题。
但是在Liferay的IFrame
Portlet中,web应用这样的Redirect操作,造成了调转到新页面后,session变成了一个新的,从而造成放置在原有session中的
login user信息丢失。
跟踪并做了如下的一组测试(Liferay和webapp在不同的JVM环境下):
应用 | 位置 | session id |
(Liferay) | 执行form post前 | D03E1B828395EF5BCB1063A8290BD254 |
(APP_A) | Login操作 | 397BB3656E2A12A96CE3F16E0A89C607 |
(APP_A) | 登陆后的新页面 | 58A1054C6EDE4A7D6CFA2FCDBB3E0736 |
解决这个问题,有两种方式,这两种方式都依赖于被liferay portlet纳入的web应用自身。
方式一:Login操作后,不采用Redirect方式,而是Dispatcher方式。
方式二:Login操作后,依然采用redirect方式,但将当前的jsessionid赋予新的页面。
Dispatcher方式:
ServletContext sc = getServletContext(); RequestDispatcher rd = null; rd = sc.getRequestDispatcher("/index.jsp"); rd.forward(request, response); |
response.sendRedirect(“ index.jsp;jsessionid=397BB3656E2A12A96CE3F16E0A89C607”) |
相关文章推荐
- Liferay Portal额外研究(三):IFrame Portlet的session丢失问题解决
- Liferay Portal额外研究(三):IFrame Portlet的session丢失问题解决
- PHP关于IE下的iframe跨域导致session丢失问题解决方法
- 解决IE Iframe跨域Session丢失问题
- 解决iframe窗体丢失Session时登录窗口显示在子页面的问题
- PHP关于IE下的iframe跨域导致session丢失问题解决方法
- 解决 Iframe跨域session 丢失问题
- 用P3P header解决IE下iframe跨域访问时候session丢失的问题
- 解决iframe中跨域session丢失的问题
- iframe跨域cookies和Session丢失问题的解决办法
- 用P3P header解决IE下iframe跨域访问时候session丢失的问题
- 用P3P header解决IE下iframe跨域访问时候session丢失的问题
- 解决iframe,frame和框架丢失或获取不到session,cookies问题
- 解决同一IP不同端口访问的站点iframe应用session丢失的问题
- iframe跨域Session丢失问题的解决办法
- 解决Iframe中session丢失问题
- 解决 Iframe跨域session 丢失问题
- IE下PHP iframe跨域导致session丢失问题的解决方法
- 解决 Iframe跨域session 丢失问题
- [转]解决 Iframe跨域session 丢失问题