1

ユーザーがログインしていることを確認した後、メンバーのみが表示できるページを表示するにはどうすればよいですか?

例えば

<?php
    start_session();
    if(isset($_SESSION[userLoggedIn]))
        echo 'welcome to the members area!';
    else
        echo 'You must log in first';
?>

また

<?php
    start_session();
    if(!isset($_SESSION[userLoggedIn]))
        goto notLoggedIn;
?>
    welcome to the members area!
<?php
    notLoggedIn:
        echo 'You must log in first';
?>

また

<?php
    start_session();
    if(isset($_SESSION[userLoggedIn]))
        include members.html;
    else
        include public.html
?>

PHP内にHTMLが多すぎるのは好きではありません。

include/ソリューションを使用する場合require、人々がhtmlファイルに直接アクセスできないようにするにはどうすればよいですか?たとえばinclude members.html;、ユーザーがURLを入力するのを止めているのは何~/members.htmlですか?ATM WAMPを使用していますが、サーバーに設定があると思いますか?

編集:わかりました、これが私の計画です。2つのディレクトリpublicprivate作成し、webrootを作成しpublicます。ユーザーがログインしているかどうかを確認するページを1つ作成します。ログインしている場合は、$ _GET['destination']の値を使用してprivateディレクトリの正しいページを含めます。私が考えていなかった落とし穴はありますか?

4

3 に答える 3

2

訪問者がログインしていない場合は、訪問者をリダイレクトして、PHPファイルをクリーンに保ちます。

if (empty($_SESSION['user_id'])
{
    header('Location: /not_logged_in_page'); // Redirect to another page!
    exit;
}

// Continue with the loggedin user page...
于 2013-01-22T21:52:30.913 に答える
2

私は反対することをお勧めしgotoます、それはこの状況では本当に必要ではありません。includes複数のページがあり、HTMLとPHPを混在させたくない場合は、使用するのが良い方法です。

すべてを1つのページに含める場合は、変数を設定できます。

<?php
    start_session();
    $logged_in = ($_SESSION['isLoggedIn'] == true);
    // Whatever else you need...
?>

次に、ページの後半(おそらく最後)で、代替構文を使用して、次の操作を実行できます。

<?php if( $logged_in): ?>
    <p>Welcome to the member's area!</p>
<?php else: ?>
    <p>You must log in first!</p>
<?php endif; ?>
于 2013-01-22T21:46:45.127 に答える
2

PHP内にHTMLが多すぎるのは好きではありません。

良い。次に、HTMLをプレゼンテーションロジックを処理するHTMLテンプレートに移動します。

 start_session();
 if(isset($_SESSION['userLoggedIn'])){
    require 'public_html/logged_in.php';

 }else{
    require 'public_html/public_area.php';
 }

さらに良いことに、次のように、これらのテンプレートをロードする関数を作成します。

function load_template($file, array $vars){
  extract($vars);
  unset($file, $vars);
  require func_get_arg(0);
}

include / requireソリューションを使用する場合、人々がhtmlファイルに直接アクセスできないようにするにはどうすればよいですか?

いくつかの方法:

  • メインスクリプトで定数を定義します。この定数がテンプレートで定義されているかどうかを確認し、定義されていない場合は終了します
  • または、同じことを行う変数をテンプレートに渡します
  • または、これらのテンプレートをWebルートの外に配置します
  • または.htaccessルールでそれらを保護します

ここでは、これらのテンプレートもPHPスクリプトであると想定しています。しかしもちろん、PHPの上にある種のテンプレートシステムを使用したり、独自のテンプレートシステムを作成したりすることもできます...

于 2013-01-22T21:50:40.043 に答える