0

joomla1.5を使用しています。同じドメインにありますが、別のフォルダーにある別のコードがあります。iframe を使用して、joomla コード内でそのフォルダーにアクセスしています。joomla アプリケーションから iframe にセッション値を送信する必要があり、次のコードでそれを実行しています。

echo '<iframe src="https://localhost/demo/quiz/quiz_main.php?u_d='.$user->id.'" width="910" height="885" style="background-color:transparent"></iframe>';

$user->id は登録済みのユーザー ID であり、ユーザーがログインすると明らかにこのページが開きます。

次に、quiz_main.php ページで u_d の値をチェックし、それに従ってシステムを制御しています。問題は、同じブラウザーで同じ URL の 2 つのタブを開き、同じユーザー ID でログインしたとします。1 つのタブからログアウトします。次に、他のタブに移動します。ユーザーは、ページが更新されない限り、iframe 内で実行されている小さなアプリケーションに対して任意のアクションを実行できます。しかし、そうであってはなりません。

この問題を解決する方法を教えてください。

4

1 に答える 1

0

とにかくサーバー側のチェックを実行する必要があるため、quiz_main.php次のようなものが必要になります

<?php
    if(!user_is_logged_in())
        // Redirect to login
?>

サーバー上のデータに影響を与えるアクションをユーザーが実行できないようにするため。

JavaScript を使用してクライアント側のチェックを行うこともできます。サーバーを毎秒ポーリングしてn、ユーザーがまだログインしているかどうかを確認し、ログインしていない場合はユーザーを適切なページにリダイレクトできます。

jQuery を使用した以下の例

function logged_in() {
    $.ajax({
        url: '/logged_in.php',
        type: 'post',
        success: function(data) {
            data = $.parseJSON(data);
            if(data['logged_in'] != true)
                window.location('login.php');
            else
                setTimeout('logged_in()', 5000); // calling itself in 5 seconds.
        }
    });
}
$(document).ready(function() {
    logged_in(); // Calling first time when the document is ready.
});

これがどのように行われるかについての大まかなスケッチです。logged_in.phpもちろん、リクエストを処理するには が必要です。

于 2012-12-06T10:33:36.537 に答える