使用标头进行PHP重定向

时间:2013-08-20 10:45:55

标签: php javascript redirect

我的网络结构


         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();

?>

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

12 个答案:

答案 0 :(得分:5)

使用这个

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

中的

或点击此链接

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

希望你能得到解决方案。

答案 1 :(得分:5)

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

只要这是相同的域名。

更多信息:Redirect parent window from an iframe action

答案 2 :(得分:3)

使用target="_parent"action="login.php"

创建表单

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

提交

答案 3 :(得分:3)

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

因此,当开始重定向时,iFrame仅影响self(不是父级的父级或部分)。

为了不使用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

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

答案 4 :(得分:2)

其中一个可能的错误,

如果此文件的编码为“UTF-8”,则会在文件顶部创建2个隐藏字符。

要解决此问题,请尝试将编码更改为“无BOM的UTF-8”

答案 5 :(得分: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();

&GT;

答案 6 :(得分: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();

答案 7 :(得分:2)

您需要打破iframe。试试这个..

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

OR(与doc参考)

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

或者

this.top.location !== this.location && (this.top.location = this.location);

答案 8 :(得分: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();

?>

希望有所帮助。

答案 9 :(得分:2)

检查此解决方案。我会把它放在标题之前,以防止闪烁。这样,您的网页就会被禁止吞咽。

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

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

答案 10 :(得分:2)

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

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


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

答案 11 :(得分:2)

试试这个

PHP

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

html

<META HTTP-EQUIV="REFRESH" CONTENT="3;URL=http://google.com">