0

我有一个网页,我们称之为 main.php,它显示了足球场的图像和场上分布的一些球员。但是,该页面使用 list.php 作为加载玩家列表的右侧框架。

发生的情况是,当用户点击球场上的一名球员 (main.php) 时,假设在守门员 (GK) 的图像上,来自世界各地球队的 GK 列表将加载到右侧列表框架 (list. php)。这是通过使用ajax。

到目前为止,我们很好。

目前的情况是,当会话超时并且用户从该字段中单击玩家时,右侧的列表不会加载,而是玩家列表从列表中消失,并显示一条消息“请登录”右侧框架(list.php)

目标是,当会话超时时,我希望整个网站重定向到主页 index.php

问题是,我已经将重定向代码放在负责显示“请登录”消息的代码之前。但是发生的事情是,重定向发生在框架内,所以我最终让 main.php 显示该字段,而 list.php 显示主页!

这是我添加的代码。

$user_id = NSession::get('user_id');
 if (!isset($user_id))
{
        NSession::removeall();         
        General::Redirect('index.php');
}

他们正在使用 Smarty。顺便说一句,我在 main.php 的顶部添加了相同的代码,现在如果用户尝试在不登录的情况下访问 main.php,它会将他重定向到主页,所以代码可以工作!

nb 这个项目不是我的,它属于我工作的公司。而且我不知道哪个代码在检查会话,我所知道的是,如果用户在会话超时后从该字段中单击一个玩家, “请登录”消息将显示在框架中。

4

4 回答 4

2

我猜重定向本质上与使用 header() 函数相同。无法使用 php 重定向指定目标,因为它是服务器端的 - 指定目标是客户端。

您需要在屏幕上打印这样的内容:

<script type="text/javascript">window.open('index.php','_parent');</script>

这会将用户重定向到索引。

于 2012-10-04T10:36:03.843 回答
0

为这样的目的使用框架是......嗯......所以80ish......

无论如何,框架可能是在这种情况下命名的。这意味着您可以解决它们,但也意味着您必须解决它们。只需在“当前”框架内加载一个 url 就可以做到这一点,这就是为什么你的方法行不通的原因。

如果您真的必须使用基于帧的方法,那么您将不得不使用 javascript 来处理所有已知的帧并重定向它们。

于 2012-10-04T10:37:00.320 回答
0

也许您可以在框架内使用一些 javascript,如下所示:

<script type="text/javascript">

    window.top.location = 'YourPage.html';

</script>

希望这可以帮助

于 2012-10-04T10:40:26.673 回答
0

问题是会话在我使用 main.php 时过期。因此,任何后续的 Ajax 请求都将失败,因为所有请求都需要会话处于活动状态。

问题是从 IFrame 发送的 Ajax 请求(IFrame 在 main.php 中并通过 Ajax 调用指向 list.php)由于会话到期而失败。

所以我通过添加另外两个会话检查来解决这个问题,一个在 main.php 上,使用 PHP 的 list.php (检查会话,如果它在那里,重定向)。在主容器main.php中,我通过JS检查会话,间隔Ajax请求检查会话,如果会话已经结束,则使用JS重定向。

PHP:

 $user_id = NSession::get('user_id');
if (isset($_POST["checklogin"]))//check loging
{
    die(isset($user_id) ? "true" : "false");
}
if (!isset($user_id) || $user_id == "")
{
   NSession::removeall();
   General::Redirect('login.php');
}

JavaScript:

jQuery(document).ready(function($) {

    $(window).focus(function() {
        checkSession();
    });
});


function checkSession()
{
    $.ajax({
        type: "POST",
        data: {"checklogin": "cl"},
        url: "list_players.php",
        success: function(result) {
            if (result === "false")
            {
                if (FIELD.showMessage === false)
                {
                    FIELD.showMessage = true;
                    alert("Your session has been closed\nYou will be redirected to login page now. ");
                    window.location.href = ("login.php");//incase user clicks OK                   
                }
            }
        }
    });
}
于 2014-04-29T04:00:59.547 回答