我的网络结构
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();
?>
请指导我这个问题。谢谢!
答案 0 :(得分:5)
使用这个
脚本window.parent.location='http://localhost/users/login.php'
中的
或点击此链接
希望你能得到解决方案。答案 1 :(得分:5)
试试这个:window.top.location.href =“http://www.site.com”;
只要这是相同的域名。
答案 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">