2016-03-30 26 views
1

Ich habe ein Login-System auf meiner Website mit Sitzungen verwendet. DieseBeschränken Sie den Zugriff auf Seiten mit Sitzungen

ist, wie es aussieht,

<?php 
session_start(); 

ob_start(); 

include 'includes/db.php'; 

$idadm=$_POST['idadm']; 
$passadm=$_POST['passadm']; 

$idadm = stripslashes($idadm); 
$passadm = stripslashes($passadm); 
$idadm = mysql_real_escape_string($idadm); 
$passadm = mysql_real_escape_string($passadm); 

$sql="SELECT * FROM admin WHERE aid='$idadm' and password='$passadm'"; 
$result = $conn->query($sql); 

$count = $result->num_rows; 

if($count == 1) { 
    $_SESSION['idadm'] = $idadm; 
    $_SESSION['passadm'] = $passadm; 

if ($_SESSION['idadm'] == 'admin') { 
    header("location:admin/index.php"); 
} else { 
    header("location:subadmin/index.php"); 
} 
} else { 
    header("location:index.php"); 
} 

ob_end_flush(); 
?> 

db.php hat die Datenbank-Anmeldeinformationen.

Dies ist der Code, der oben auf den geschützten Seiten ist,

<?php 
    session_start(); 
    if (!isset($_SESSION['idadm'])) { 
     header('location:/index.php'); 
     die; 
} 
?> 

Das Login-Skript mit Ausnahme von ein Problem, eingeloggte Benutzer gut funktioniert sowohl admin und Subadmin Seiten zugreifen können.

Es gibt nur einen Administratorbenutzer und die ID für diesen Benutzer in der Datenbank lautet 'admin'. Der Administrator sollte nur auf 'admin/index.php' zugreifen können und andere Benutzer sollten auf 'subadmin/index.php' zugreifen können.

Wie ändere ich das Skript, um dies zu erreichen?

Antwort

0

Also, zunächst nach oben, erhält die $_SESSION["idadm"] und $_SESSION['passadm'] ...

Also erstens in Ihrer Admin-Seite würde dies sein: eröffnen

<?php 
    session_start(); 
    if (!isset($_SESSION['idadm'])) { 
     header('location:/index.php'); 
     die; 
    } else { 
     $username = $_SESSION["idadm"]; 
     $password = $_SESSION['passadm']; // Also storing passwords in session vars is not a good idea. :/ 

Dann eine DB-Verbindung:

$pdo = new PDO($dsn, $DBUsername, $DBPass): 
// or 
$mysqli = mysqli_connect($host, $DBUsername, $DBPass, "admin") 

Dann prüfen, ob aktueller Benutzername und Passwort in der DB ...

vorhanden sind

ich es in PDO tue:

$sth = $pdo->prepare("SELECT COUNT(*) AS number_of_users FROM table_name WHERE aid = :username AND password = :password"); 
$sth->bindParam(":username", $username, PDO::PARAM_STR); 
$sth->bindParam(":password", hash("YOUR_HASHING_ALGO", $password), PDO::PARAM_STR); // If you have not hashed the password you can remove the hash method, but not hashing a password is a horrible idea 
$result = $sth->fetch(PDO::FETCH_ASSOC); 
if((int) $result["number_of_users"] >= 1) { 
    // yay he is an admin, do somethin' 
} else { 
    // nope, he is not allowed to enter, what to do with him? 
} 

Und schließlich nahe der else-Block mit:

} 

In der Verbindungszeichenfolge der Sie Ihre eigenen spezifischen Anmeldeinformationen und DB verwenden.

Hoffe es hilft dir!

Verwandte Themen