0

このphp関数は、ユーザーがログインしていない場合、現在ユーザーを別のページにリダイレクトします

if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')){
header("location: login_failed.html");
exit();
} 

ユーザーをリダイレクトする代わりに次のように関数を変更するにはどうすればよいですか?

  • javascript関数をトリガーします:loginFailed();
  • プリロードされた特定のiframeが起動しないようにします(これらはユーザーがログインしている必要があり、ログインしていない場合は現在空のiframeとして開いています)。このためのスクリプトを以下に含めました。または、特定のクラスまたはdata-fancybox-typeを持つiframe、またはを必要とするiframeが起動しないようにします!isset($_SESSION['SESS_USER_ID'])

トリガー/防止したい機能

function loginFailed() {
    $().toastmessage('showToast', {
        text: 'Log In Failed<br/><br/>Please check your username and password',
        sticky: false,
        position: 'top-center',
        type: 'message',
        closeText: '',
        close: function () { console.log("toast is closed ...") }
    });
} 
$(function () {
    $(".fancybox").fancybox({
      preload: true,
    });
    $(".fancybox").eq(0).trigger('click');
});   

私はもう試した:

echo "<script>loginFailed();</script>";
echo "<script type="text/javascript">loginFailed();</script>";
echo "<script type="text/javascript">loginFailed;</script>";
4

3 に答える 3

1

techfoobarの答えに追加...

PHP変数に応じて異なるjavascriptをエコーするのではなく、一般に、変数をPHPからJavascriptに入れ(必要な場合)、Javascriptに処理させることをお勧めします。

すべてのjavascript変数はクライアントが操作できることに注意してください。

次のようなものを試してください。

if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')){
$t="no_session";
}
else{
$t="yes_session";
} 

.... 


<script>
var session="<?php echo $t; ?>";

if(session == "no_session")
loginFailed();
</script>
于 2012-12-14T02:02:29.277 に答える
0

PHPはサーバー側で実行されます。JavaScriptは、ブラウザ内のクライアント側で実行されます。PHPはJavaScript関数を直接呼び出すことはできません。

ただし、PHPはJavaScriptをHTMLと一緒にブラウザーにレンダリングできるため、ブラウザーはJavaScriptを実行できます。

特定のケースでは、AJAX呼び出しを介してログイン状態を確認し、成功コールバックで必要なJSメソッドを呼び出すことができます。


例:

ログインステータスを確認するには:

/* JS */
function checkLoginState() {
    $.post('/yourserver.com/isloggedin.php', function(data) {
        if(data != "OK") { //  not logged in

            // call your JS method thats disables stuff etc.
            loginFailed();
        }
    });
}

// Periodically check login state
setInterval(checkLoginState, 10000); // check every 10 seconds, change as needed.

/* PHP - isloggedin.php */
if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')){
    echo "NOT OK";
} 
else {
    echo "OK";
}
于 2012-12-14T01:56:58.030 に答える
0

@hellohellosharpの提案を、別の問題のために@willollerから提供された解決策と組み合わせて、それを理解しました:-)

これをphpに追加します:

$logged_in = (isset($_SESSION['SESS_USER_ID']));

これをJavaScriptに追加します。

<?php if ($logged_in) : ?>
    <a class="fancybox" data-fancybox-type="iframe" href="iframe1.html"></a>
<?php else : ?>  
     loginFailed();
<?php endif; ?>

また、これを使用して、ユーザーがログインしているかどうかに基づいてメニューオプションを変更しています。

念のために言っておきますが、これはISSETを使用して、表示するJavaScriptを決定しますが、ユーザーエクスペリエンスを変更するだけで、セキュリティは提供しません。

于 2012-12-15T20:23:51.530 に答える