TL; DR: 使用header("Location: somepage.php");
各ページの先頭に$_SESSION['user_type']
またはSQLクエリに基づいてリダイレクトします。別々のログインの必要はありません。
私はmysql.php
は、データベースファイルであると仮定しています。次のようなものを追加し、すべてのページの上部に
のmysql.php
<?php
$mysqli = new mysqli('localhost', 'username', 'pass', 'db', port);
if(mysqli_connect_errno()) {
echo "DB Error!"; exit();
}
?>
。あなたは、以下の場合にリダイレクトすることができ、同様に
<?php
session_start();
require("mysql.php");
// If not logged in, go to login
if(isset($_SESSION['user_id']) && $_SESSION['logged_in']) {
if($result = $mysqli -> prepare("SELECT id FROM `USER` WHERE id = ? AND session_id = ? LIMIT 1")) {
$session_id = session_id();
$result -> bind_param("i", $_SESSION['uid']);
$result -> execute();
$result -> store_result();
if($result -> num_rows != 1) {
header("Location: login");
exit();
}
}
else {
header("Location: login");
exit();
}
}
else {
header("Location: login");
exit();
}
?>
:ユーザーがログインしていない場合、これは、ログインページに仮定のロット(整数ID、セッション変数など)をリダイレクトしますが、あなたのアイデアを得ますログインしたユーザーは管理者またはメンバーです(ログイン時に設定される$_SESSION['user_type']
のようなものを使用します)。
login.php
<?php
session_start();
require("mysql.php");
// If already logged in, redirect to admin or members based on session variable.
// ...
//
// If a login form has been submitted (assuming you're logging in from a POST)
if(isset($_POST['submit'])) {
if($_POST['username'] && $_POST['password']) {
if($result = $mysqli->prepare("SELECT id, username, user_type, password FROM `USER` WHERE username = ? LIMIT 1")) {
$result -> bind_param("s", $_POST['username']);
$result -> execute();
$result -> store_result();
if($result -> num_rows == 1) {
$result -> bind_result($id, $username, $user_type, $bcrypted);
$result -> fetch();
if(password_verify($_POST['password'], $bcrypted)) {
session_regenerate_id(); // Avoid Session Fixation Attack
$session_id = session_id(); // Update the USER table using this
$_SESSION['user_id'] = $id;
$_SESSION['username'] = $username;
$_SESSION['user_type'] = $user_type;
$_SESSION['logged_in'] = true;
// Log some data to your DB, login time, ip, etc
header("Location: ".($_SESSION['user_type'] == 'admin' ? 'admin.php' : 'member.php'));
exit();
}
}
}
}
}
?>
<html> ...
かなりの数の点が存在して:あなたは新しいしているので、ここではいくつかのより多くのコードです。実際の 'ログイン'の前にセッションIDを再生成し、bcryptをパスワードに使用します。MySQLのパラメータ化された文を理解していると仮定すると、三項演算子もあります。私はこれの少なくとも一部が役に立てば幸い
logout.php
<?php
session_start();
$_SESSION['logged_in'] = False;
$_SESSION = array();
session_destroy();
header("Location: login.php");
?>
:ログアウトページを忘れないでください。私がカバーしていない何百万ものものがありますが、あなたはすでにウェブ上の資料から多くを学ぶことができます。がんばろう!
http://stackoverflow.com/questions/39435675/php-sessions-username-passwordにアクセスし、問題を解決した回答を受け入れて、あなたを助けた回答をすべて投票してください。それから、ここでも同じことをしてください。これは、SOコミュニティが技術を初めて使う人たちをより多く助けることを促します。あなた自身の質問に答えることもできます。 – Eugene