明凯博客

关注网站技术,一个特立独行的程序员

PHP中session过期跳转到登陆页面并跳出iframe框架的两个方法

最近在做lavarel中间件的时候,判断用户登录后操作超时,session过期后要重新登录,但是用的iframe,返回的登陆页总是在子框架中显示,这里提供两种方案去实现这种功能。

方法一:

一般使用中间件过滤用户是否登录,如果用户没有登陆则转向登陆页面,这时候可以使用return redirect(‘/admin/login’);

但当在页面上使用了iframe后,发现被重定向的只是父页面中的iframe区域,登陆页面内容显示在该区域中。
并且再次登陆后所有的页面又会全部展示到子页面中,还得重新刷新下页面来正确显示页面。

看看我以前写的代码:

1
2
3
4
5
6
7
    public function handle($request, Closure $next)
    {
        if(!Session::has('admin')){
             return redirect('/admin/login');
        }
        return $next($request);
    }

因为redirect没有target属性,但html页面和js中有,于是,当判断出用户没有访问权限时,我们可以在php中使用js来转向到真正的登录页面。

在中间件使用如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
    public function handle($request, Closure $next)
    {
        if(!Session::has('admin')){
             return redirect('/ladmin/login');
            echo "<html>";  
            echo "<script>";  
            echo "window.open ('/ladmin/login','_top')";  
            echo "</script>";  
            echo "</html>";
            exit();
        }
        return $next($request);
    }


方法二:

在你想控制跳转的页面,比如login.php中的与之间加入以下代码:

1
2
3
<script type="text/javascript"> 
     if (window != top) top.location.href = location.href; 
</script>

, , ,

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注