0

私はウェブページを持っています。それをmain.phpと呼びましょう。これは、サッカー場とその場に分散している何人かの選手の画像を表示します。ただし、そのページでは、プレーヤーのリストをロードする右側のフレームとしてlist.phpを使用しています。

何が起こるかというと、ユーザーがフィールド上のプレーヤー(main.php)をクリックすると、たとえばゴールキーパー(GK)の画像で、世界中のチームのGKのリストが右側のリストフレーム(リスト)に読み込まれます。 php)。これはajaxを使用することによるものです。

これまでのところ、私たちは良いです。

現在の状況では、セッションがタイムアウトし、ユーザーがフィールドからプレーヤーをクリックすると、右側のリストが読み込まれず、代わりにプレーヤーのリストがリストから消え、「ログインしてください」というメッセージが表示されます。右側のフレーム(list.php)

目的は、セッションがタイムアウトしたときに、Webサイト全体をメインページの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

そのような目的のためにフレームを使用することは...まあ...だから80っぽい...

とにかく、フレームはおそらくそのようなシナリオで名前が付けられています。これは、それらに対処できることを意味しますが、それらに対処する必要もあります。「現在の」フレーム内に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を指す)がセッションの有効期限のために失敗することでした。

そこで、PHPを使用してmain.phpとlist.phpに2つのセッションチェックを追加することでこの問題を修正しました(セッションがある場合はリダイレクトしてください)。そして、メインコンテナ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 に答える