您的位置:首页 > 编程语言 > Java开发

java web session过期 跳转页面没有跳出frame的问题

2017-12-05 20:35 711 查看

Session过期导致的问题

对于frame页面框架的java web项目,如果session过期执行跳转操作时,只在一个frame中(例如center frame)跳转到设置的login页面了,为了能直接跳转到最初的登录页面,就需要在跳转的页面中(login.jsp)添加如下代码:

<script type="text/javascript">
if (top.location != location){
top.location.href = location.href;
}
</script>


这段代码的含义就是:如果login.jsp不是框架的最外层页面,则改变框架结构,使login.jsp变为框架最外层,这样就实现了跳出frame框架的效果了,但是这样也有缺点,就是会在框架内先显示一下登录页,然后才会执行JS,使登录页加载为整个页面。

点击退出登录的问题

当用户退出系统或者session过期或者非法请求时,都要使当前页面跳转到登录页面。比如用户点击注销的按钮

<a href="../login/action_logout.do">退出系统</a>


退出之后你会发现,只是刷新了top.jsp上面那个iframe,其他两个还在。

解决办法

1、利用超链接属性中target=”_parent”

<a href="../login/action_logout.do" target="_parent">退出系统</a>
<a href="../login/action_logout.do" target="_top">退出系统</a>


原理相当于目标页面替换当前的父窗体,而不是当前操作的窗体。

target属性值的含义:

_blank:新建窗口、_self:相同窗口、_parent:父窗口、_top:首窗口

2、利用js

1)在logout()函数中将session清空,返回的登录页面就会全屏显示登录页面.他的原理相当于在请求发送前,把请求的页面替换成当前页面最顶级的frame,这样返回的页面理所应当的会替换整个页面的内容。

<a href="#" onclick=top.location.replace("logout.action")>退出</a>


2)在login.jsp中加入脚本

function window.onload()
{
if(window.parent.length>0)
window.parent.location=location;
}




<script type="text/javascript">
if (top.location !== self.location) {
top.location=self.location;
}
</script>




<script language="JavaScript">
if (window != top)
top.location.href = location.href;
</script>


当登录页面在frame中加载过程中,会触发这段js代码,从而判断是不是顶级窗体而自动跳转。

这两种方法的区别就在于一个是提交请求之前对请求进行处理,另外一个是请求回来以后进行处理。

参考链接:

http://blog.csdn.net/qq_35357001/article/details/53544072

https://www.cnblogs.com/DylanZ/p/6169772.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java web