2016-08-30 2 views
1

通常のユーザーとAdminUserのログインシステムを作成しようとしています。通常のユーザーがブラウザhttp://localhost/projectを入力すると、ログイン画面が表示され、ユーザーは自分のIDとパスワードを使用してログインできます。しかし、ログインしている間に、ユーザーがブラウザでhttp://localhost/project/adminを入力すると、通常のユーザーはadminpanelでアクセスを停止します。どうすればいいのですか?私は長い間ここにこだわっています。何か助けてください?ユーザーのためのphpの管理パネルにアクセスするユーザーを停止します

ログイン:ユーザーのための

$query = "SELECT * FROM user WHERE eid='$eid'and password='$password'"; 
$result = $db->select($query); 
if ($result != false) { 
$value = $result->fetch_assoc(); 
Session::set("login", "userLogin"); 
Session::set("username", $value['username']); 
Session::set("email", $value['email']); 
Session::set("uid", $value['uid']); 
Session::set("image", $value['image']); 
header("Location: index.php"); 
} else { $loginErr = "Username 
or Password Not Matched !!";} 

セッション機能:ユーザーのための

public static function checkSession(){ 
self::init(); 
if (self::get("userLogin")!== false) { 
self::destroy(); 
header("Location:login.php"); 
} 
} 

セッションチェック:管理者のための

Session::checkSession(); 

ログイン

$query = "SELECT * FROM afcadmin WHERE adminname='$adminname'and password='$password'"; 
$result = $db->select($query); 
if ($result != false) { 
    $value = $result->fetchassoc(); 
    Session::set("loginadmin", "adminLogin"); 
    Session::set("adminname", $value['adminname']); 
    Session::set("adminemail", $value['adminemail']); 
    Session::set("adminid", $value['adminid']); 
    header("Location: index.php"); 
    } else { 
     $loginErr = "Usernameor Password Not Matched !!"; 
     } 

adminのセッション機能:ユーザーと管理者のログインのための異なるテーブルを使用する必要はありません管理者

Session::checkSessionAdmin(); 
+1

[PHPでSQLインジェクションを防ぐにはどうすればいいですか?](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) http://plaintextoffenders.com/faq/devs –

+0

@ AlexanderO'Maraは、セカンドリンクは面白くて啓発的だったと言っています。残念ながら、デザイナーがそのような駄目な背景色を持っていたので、背景色がブロックされていた(あなたが知っているので、いくつかの作業場所はtumblrのようなソーシャルメディアをブロックするので) –

答えて

0

ため

public static function checkSessionAdmin(){ 
    self::init(); 
    if (self::get("adminLogin")!== false) { 
    self::destroy(); 
    header("Location:login.php"); 
    } 
    } 

セッションチェック。ユーザーに管理者権限があるかどうかを確認するのに役立つ列が必要です。例:is_admin列を作成し、ユーザーが管理者の場合は1、それ以外の場合は0に設定できます。

# Your query 
$stmt = "SELECT 
users.id as uid, 
users.username as username, 
users.is_admin as is_admin 
FROM users 
WHERE users.username='{$username}' 
AND users.password='{$password}' 
LIMIT 1 
"; 

次に、すでに行っているようにセッションに結果を追加します。

var_dump($_SESSION['user']); 

Array { 
    'uid' => '125', 
    'username' => 'SomeGuy', 
    'is_admin' => '1', 
} 

あなたのセッションが現在値is_adminが含まれ、ユーザーは簡単なifステートメントを使用して管理されている場合ので、あなたがチェックすることができます。

if ($_SESSION['user']['is_admin'] == 1) { 
    // Admin only stuff here 
} 
0

私はあなたが自分のデータを保存するために、ユーザーや管理者のための2つの別々のテーブルを持つ見ることができますので、私はそれはあなたのクエリのいずれかの問題になることはありませんだと思うと、ユーザーのために、我々はそれらを眉ために停止することはできませんその任意のページ。

ユーザーが自分の詳細を使用して管理パネルにログインできる場合は、両方のテーブルに複数のデータがあることを意味します。これは、両方のテーブルに同じデータを挿入する可能性があります。クエリ。

解決策として私は、あなたの要件に合っているかどうかをチェックしてセッションを設定するかどうかをチェックするために、選択したクエリの後にユーザーまたは管理者がどこにあるかを定義するデータベースの両方に、

私の視点からは、ユーザーと管理者の両方に単一のテーブルを用意して、すべてのコメントデータを保存し、管理テーブルにuser_idといくつかの優先度を保存するようにしてください。あなたがuser_idが管理テーブルに属しているかどうかをチェックし、管理者かユーザか、そしてセッションを設定しているかどうかをチェッククエリのチェックをするとき。

これは問題を解決する可能性がありますが、もっと必要な場合はお知らせください。

0

user_typeフィールドはデータベースにあり、adminセッションでは、user_typeがadminかcustomerかを確認できます。管理者が管理者ダッシュボードにリダイレクトする場合は、顧客ダッシュボードにリダイレクトします。管理ヘッダーには、同じことを確認してください。

これが役に立ちます。

0

解決策を見つけました。私は次のコードを置き換えました。

:セッション機能の管理のための

Replaced Session::Session::set("loginadmin", "adminLogin"); by Session::set("adminlogin", "true"); 

コード:管理者ログイン用の

Replaced if (self::get("login")!== false) by if (self::get("login")== false) 

コード:

ユーザログインのためのコード:

Replaced Session::set("login", "userLogin"); by Session::set("login", "true"); 

コードセッション機能のユーザーのために

Replaced if (self::get("adminlogin")!== false) by if (self::get("adminlogin")== false) 
関連する問題