0

このステートメントは、1回だけ使用する場合は正常に機能しますが、複数回使用する必要がある場合は機能しません。理由は知りたいのですが、もっと重要なのは、どうすればそれを回避できるのか知りたいです。

<?php if (isset($_SESSION['SESS_USER_ID'])) { ?>         
<?php }  
else {?>
<?php } 

ユーザーがログインしているかどうかに応じて、ページ上のいくつかの項目(メニュー項目、ユーザーへのメッセージなど)を変更する必要があります。

4

2 に答える 2

1

目的を達成するために、同じファイルにPHPコードとHTMLコードを混在させないでください。

現在のほとんどのフレームワークは、ある種のテンプレートを使用しています。ユーザーがログインしている場合は、ログインしているテンプレートを表示します。そうでない場合は、他のテンプレートを表示します。

SmartyTWIG(Symfonyでのみ使用される)など、無料で利用できる多くのテンプレートフレームワークがあります。

これらを使用したくない場合は、コードを別のファイルに分割することを検討する必要があります。それでも、次のようになります。

<html>
[...]
    <body>
    [...]
        <?php 
            if (isset($_SESSION["SESS_USER_ID"])) {
                include("restricted_folder/file_i_want_my_logged_in_user_to_see.php");
            } else {
                include("login_required.php");
            }
        ?>
    [...]
    </body>
</html>

「restricted_folder」をユーザーが直接アクセスできないようにすることを忘れないでください。アクセス許可を削除するか(フォルダーをchmodすることで実行できます)、そのフォルダーへのアクセスを禁止する.htaccessを書き込みます。

于 2012-12-14T19:40:46.487 に答える
1

それを回避する簡単な方法は次のとおりです。

<?php $logged_in = (isset($_SESSION['SESS_USER_ID'])); ?>

それから

<?php if ($logged_in) : ?>
   //show secret stuff
<?php else : ?>
   // show public stuff
<?php endif; ?>

しかし

最初にアクセスしてから2回目にアクセスするまでの間に、何か問題が発生しています$_SESSION。誤ってどこかに設定しているか(=代わりに使用するの==が簡単な方法です)、または舞台裏で変更されている副作用のあるコードがあります。

于 2012-12-14T19:33:55.257 に答える