今天,工作中要在一个门户站点(aspx)中引用另一个应用站点(JSP)的页面。中间需要进行模拟登陆。
我给出的方案时,先在门户上打开一个隐藏的iFrame,里面调用应用系统的一个后门页面,模拟登陆。这样在当前的浏览器窗口就应该同时具有两个WEB站点的session了,以后,就可以无缝链接到应用站点的内部页面了。
不过,具体操作起来,发现一个奇怪的现象:第一次打开门户站点时,iFrame模拟登陆后总是无法跳转到我期望它打开的页面,而总是跳到应用站点的首页。再刷新一次整个页面,才能正确跳转。
跟踪分析了一下,发现,跳转地址是内嵌iFrame的第一个JSP中存放到session中,然后模拟登陆(表单自动提交)后再redirect的。问题在于,存放的SessionID和redirect时的sessionID是不一致的。所以总是跳到默认首页。
研究了一个上午,翻阅了不少资料,还是没有解决。突然发现,IE的状态栏中出现了cookie阻挡的图标,打开一看,就明白了。原来第一次访问时,IE会屏蔽外部网站的所有cookie,这样JSP的session就无法使用了。
解决方法:目前是客户端把应用站点的地址设置为安全站点即可。