質問

私は父のウェブサイトを構築するために PHP と JavaScript を使用してきました。彼はウェブサイトにログイン システムを組み込みたいと考えており、私は PHP を使用してシステムの設計を行いました。私の問題は、その人がログインしている場合にボタンを表示するにはどうすればよいですか?

例えば ​​- あなたが持っている , 製品, 私たちについて, 、 そして 接触. 。ボタンが欲しい ディーラー, 卸売業者, 、ユーザーがログインしている場合はその他の情報も表示されます。それで、私は持っています , 製品, 私たちについて, 連絡先, 、ディーラー(ディーラーログインの場合)、 卸売業者 (ディストリビューターがログインしている場合) など。

これを行うには JavaScript が良い方法でしょうか、それとも PHP が良いでしょうか、あるいはその両方でしょうか?JavaScript を使用してボタンの表示と非表示を切り替え、PHP を使用してどのボタンを表示するかを確認します。­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

役に立ちましたか?

解決

セキュリティに関しては、 クライアントから来るものは信用できない:

  • 訪問者はすべてのコード (PHP ではなく HTML と Javascript) を見て、何かを試すことができます。
  • 訪問者はブラウザを使用することさえできません。スクリプトを使用してリクエストを送信するのは簡単です

これは、ボタンを非表示にすることが優れたユーザー インターフェイス設計であることを意味します (ログインしていないとボタンを使用できないため)。しかし、それはセキュリティ機能ではありません。セキュリティ機能は、必要な各アクションの前に、訪問者がログインしていることをサーバー上でチェックします。

ボタンを表示するつもりがない場合、HTML と画像をブラウザに送信し、JavaScript で非表示にすることは役に立ちません。PHPで確認してみます。

他のヒント

メニュー ファイル内、または次のように記述します。

<? require 'auth.php' ?>
<ul>
    <li><a href="">Home</a></li>
    <li><a href="">Products</a></li>
    <? if( loggedin() ): ?><li><a href="">Secret area</a></li><? endif; ?>
</ul>

次に、認証が必要なページでこれを実行するだけです。

<?php 
    require 'auth.php';
    require_login();
?>

auth.php には以下が含まれます。

<?php
    function loggedin(){
        return isset( $_SESSION['loggedin'] );
    }

    function require_login(){
        if( !loggedin() ){
            header( 'Location: /login.php?referrer='.$_SERVER['REQUEST_URI'] );
            exit;
        }
    }
?>

JavaScript を使用してボタンを非表示にすると、アプリケーションにセキュリティ ホールが発生します。悪意のあるユーザーは、JavaScript を無効にするか、独自のスクリプトを適用してセキュリティを回避する可能性があります。

PHP を使用して、ボタンをレンダリングするかどうかを選択することをお勧めします。私は .NET でこれを頻繁に行います。

ユーザーが制限されたボタンを使用しようとしたときも、サーバー側でユーザーのアクセスをチェックできる必要があります。

私たちが仕事で行ったことは、ユーザーがログインしているかどうかを確認するなどの機能を提供するライブラリを作成することです。例えば:

<?php
require_once 'Auth.php';
// output some html
if (isLoggedIn()) {
    echo 'html for logged in user';
}
// rest of html

認証されたユーザーのみが表示されるページの場合、コントローラーはユーザーがログインしているかどうかを確認し、ログインしていない場合はログイン ページにリダイレクトします。

<?php
public function viewCustomer($customerId) {
    if (!isLoggedIn())
        redirectToLoginPage();
}

クリスチャン・レスキュイエが書いたことはすべて正しいです。ただし、彼は「そうすべきだ」ではなく「そうするだろう」と言っていることに注意してください。選択はそれほど簡単ではありません。

まず第一に、セキュリティは選択の問題ではありません。アクションを実行するときは、サーバーでセキュリティ チェックを行う必要があります。どのコードがアクションにつながるボタンの表示/非表示を決定するかは関係ありません。

そのため、JavaScript で表示/非表示ロジックを実行する場合の欠点が 1 つだけ残ります。それは、ユーザーに送信される HTML が必要以上に大きくなるということです。これは大したことではないかもしれません。

ただし、PHP に表示/非表示ロジックがあるとマイナス面もあります。必要な PHP コードは通常、 タグスープ. 。Akira のコードは、通常どのように行われるかを示す良い例を提供します。

対応する JavaScript コードは次のようになります。

if (logged())
{
    elementSecretArea.style.display = "list-item";
}

(非表示にできる要素にはデフォルトで display:none があると仮定します)。

このスタイルでは、優れた「Ajax」シナリオも可能になります。ユーザーは、秘密領域のないページを表示し、パスワードを入力し、ページを更新せずに秘密領域を表示します。

したがって、他の理由でドキュメントが読み込まれるときに実行されるスクリプトがすでにある場合は、そこに表示/非表示ロジックを追加することを真剣に検討します。

基本的にHTMLのメニューがある場所、たとえばリストとして <ul> <li>Home</li> </ul> の後にphpを追加します </li> 最後の項目の:

<?php
  if($session-logged_in) {    
?>

<li>My Account</li>

<?php  
  }
?> 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top