5

我的网络结构是


         Header-of-page

导航链接 || iFrame


       Footer

我正在尝试处理会话超时,当会话超时时,我正在尝试将页面重定向到登录页面,这很好(会话超时)。

问题: 当我重定向页面时,登录页面显示在 iFrame 中,这不是预期的。

如何重定向到登录页面(整个窗口),而不是在 iFrame 中打开它。

我试过: 1. 使用标头 2. 使用 javascript(已评论)

<?php session_start();

$timeout = 1; // Set timeout minutes
$timeout = $timeout * 60; // Converts minutes to seconds

if (isset($_SESSION['timeout'])) 
{
    $session_life = time() - $_SESSION['timeout'];
    if ($session_life > $timeout) 
    {
        session_destroy();
        header("Location: login.php?msg=timeout");
        // echo '<script language="javascript">'; 
                    // echo 'window.location.replace("login.php");';
                    // echo '</script>';
    }
}
$_SESSION['timeout'] = time();

?>

请指导我解决这个问题。谢谢!

4

12 回答 12

5

用这个

在脚本中window.parent.location='http://localhost/users/login.php'

或点击此链接

https://forums.digitalpoint.com/threads/button-to-navigate-to-a-new-page-but-exit-the-if​​rame-too.1846291/

希望你能得到解决方案。

于 2013-08-20T10:53:28.540 回答
5

试试这个:window.top.location.href = " http://www.site.com ";

只要这是在同一个域名上。

更多内容:从 iframe 操作重定向父窗口

于 2013-08-20T11:20:35.653 回答
3

这里的问题是 iFrame 是子窗口中的另一个窗口。

因此,何时开始重定向 iFrame 仅影响自身(而不是父级或父级的父级)。

要不使用 javascript,我们可以放置一个指向 login.php 的链接,该链接以父级为目标。

<a href="login.php" target="_top">Goto login.php</a>

_top将针对顶部窗口框架。

http://reference.sitepoint.com/html/a/target#target__li5阅读 _top 上设置的目标属性。

另一种方法是使用javascript:

window.top.location.assign("http://www.yoursite.com/login.php"); // Redirect
// window top frame to "http://yoursite.com/login.php"

请阅读以下有关 javascript 窗口文档的链接:

http://www.w3schools.com/jsref/prop_win_top.asp

http://www.w3schools.com/js/js_window_location.asp

如果您想要“PHP”代码,只需使用echo

http://www.php.net/manual/en/function.echo.php

我希望这可能会有所帮助。

于 2013-08-30T00:20:09.593 回答
3

target="_parent"使用and创建表单action="login.php"

并使用提交$(form).submit();

于 2013-08-29T12:49:12.950 回答
2

one of the probably mistakes,

if the encoding of this file is "UTF-8" it will create 2 hidden characters in the top of the file.

To fix this issue, try to change the encoding to "UTF-8 without BOM"

于 2013-08-28T12:45:22.150 回答
2

你需要打破 iframe。尝试这个..

if(this != top){
  top.location.href = this.location.href;
}

或(带文档参考)

if(this != top){
  top.document.location.href = this.document.location.href;
}

或者

this.top.location !== this.location && (this.top.location = this.location);
于 2013-08-30T06:43:36.200 回答
2

试试这个

php

echo "<script> window.location='forgot.php'</script>";

html

<META HTTP-EQUIV="REFRESH" CONTENT="3;URL=http://google.com">
于 2013-08-30T08:34:58.890 回答
2

你可以放一个出口;重定向后

<?php session_start();

$timeout = 1; // Set timeout minutes
$timeout = $timeout * 60; // Converts minutes to seconds

if (isset($_SESSION['timeout'])) 
{
    $session_life = time() - $_SESSION['timeout'];
    if ($session_life > $timeout) 
    {
        session_destroy();
        header("Location: login.php?msg=timeout");
        exit(); // LOOK AT THIS LINE
        // echo '<script language="javascript">'; 
                    // echo 'window.location.replace("login.php");';
                    // echo '</script>';
    }
}
$_SESSION['timeout'] = time();

?>

于 2013-08-29T19:10:00.387 回答
2

检查此解决方案。我会把它放在标题之前以防止闪烁。这样,您的页面将不会被吞没。

http://usablelayout.com/articles/automatically-break-out-iframe

<script type="text/javascript">
<!--
    if (top.location!= self.location) {
        top.location = self.location.href
    }
//-->
</script>
于 2013-08-30T08:08:48.203 回答
2

我猜这个 php 在 iframe 中运行的文件中,在这种情况下你必须指示父窗口重定向到登录。

从 php 回显以下代码,因此当您的页面将在浏览器中呈现时,它将指示脚本重新加载页面。但是对于页面不加载页面的其余部分发出exit(0). 您的最终脚本应如下所示。

<?php session_start();

$timeout = 1; // Set timeout minutes
$timeout = $timeout * 60; // Converts minutes to seconds

if (isset($_SESSION['timeout'])) 
{
    $session_life = time() - $_SESSION['timeout'];
    if ($session_life > $timeout) 
    {
        session_destroy();        
        echo '<script language="javascript">';

        //Echo the exact full url to your login page
        echo 'window.parent.location="login.php?msg=timeout"'; 
        echo '</script>';
        exit(0); // So script won't go further displaying the page
    }
}
$_SESSION['timeout'] = time();

?>

希望有帮助。

于 2013-08-30T07:20:04.443 回答
2

如果您在同一页面上使用登录操作,标题重定向将不起作用。

你可以使用简单的 window.location.href='url';


对于登录,您必须将登录查询发送到新页面,从那里您可以轻松轻松地重定向......

于 2013-08-30T08:26:34.323 回答
2

试试这个方法。PHP 重定向在 JS 重定向之前工作,因此浏览器永远不会运行 JS。这是您可以重定向整个窗口对象的唯一方法。

<?php session_start();

$timeout = 1; // Set timeout minutes
$timeout = $timeout * 60; // Converts minutes to seconds

if (isset($_SESSION['timeout'])) 
{
    $session_life = time() - $_SESSION['timeout'];
    if ($session_life > $timeout) 
    {
        session_destroy();
        // header("Location: login.php?msg=timeout");
        echo '<script language="javascript">window.top.location.href = "login.php?msg=timeout";</script>'; 
    }
}
$_SESSION['timeout'] = time();
于 2013-08-30T00:20:08.743 回答