Meerdere sessies probleem in php

Ik probeer een portal te bouwen waarin ik twee 'pagina's' heb, een waarin normale gebruikers worden ingevoerd en eentje zoals deze/admin waar de beheerder binnenkomt. Ik gebruik sessies, maar het probleem is dat zodra een gebruiker is ingelogd, hij/zij zelfs toegang heeft tot het beheerdersgebied en omgekeerd. Waarom is dat?

Hoe zou ik het voorkomen?

Bedankt.

De check_login

<?php
define(DOC_ROOT,dirname(__FILE__));//To properly get the config.php file
$username = $_POST['username']; //Set UserName
$password = $_POST['password']; //Set Password
$msg ='';
if(isset($username, $password)) {
    ob_start();
    include(DOC_ROOT.'/config.php'); //Initiate the MySQL connection
   //To protect MySQL injection (more detail about MySQL injection)
    $myusername = stripslashes($username);
    $mypassword = stripslashes($password);
    $myusername = mysqli_real_escape_string($dbC, $myusername);
    $mypassword = mysqli_real_escape_string($dbC, $mypassword);
    $sql="SELECT * FROM login_admin WHERE user_name='$myusername' and user_pass=SHA1('$mypassword')";
    $result=mysqli_query($dbC, $sql);
   //Mysql_num_row is counting table row
    $count=mysqli_num_rows($result);
   //If result matched $myusername and $mypassword, table row must be 1 row
    if($count==1){
       //Register $myusername, $mypassword and redirect to file "admin.php"
        session_register("admin");
        session_register("password");
        $_SESSION['name']= $myusername;
        header("location:index.php");
    }
    else {
        $msg = "Wrong Username or Password. Please retry";
        header("location:login.php?msg=$msg");
    }
    ob_end_flush();
}
else {
    header("location:login.php?msg=Please enter some username and password");
}
?>

Wat ik vóór elke pagina invoeg:

<?php
session_start(); //Start the session
define(ADMIN,$_SESSION['name']); //Get the user name from the previously registered super global variable
if(!session_is_registered("admin")){ //If session not registered
header("location:login.php");//Redirect to login.php page
}
else //Continue to current page
header( 'Content-Type: text/html; charset=utf-8' );
?>
1
Hoewel ik wou dat het lezen van gedachten een talent voor mij was, moet je wat code opgeven zodat we je kunnen helpen.
toegevoegd de auteur Bailey Parker, de bron
hoe u beslist of een gebruiker een admin of een normale gebruiker is
toegevoegd de auteur user1432124, de bron
bedankt, ik heb mijn antwoord bijgewerkt
toegevoegd de auteur La Myse, de bron
Ik heb ze in aparte mappen gezet, de code, maar ik ben van plan er nu één in te voegen, slechts één login!
toegevoegd de auteur La Myse, de bron

3 antwoord

dit is wat je zou moeten doen:

   //and 956 in ur db is admin, user enters the userID in login

    if(_SESSION['userID']=="956")
     {

            redirect_to("localhost/admin.php");
     }
     else
     {
            redirect_to ("localhost/home.php");

      }
1
toegevoegd
ik heb het net geschreven, om hem een ​​idee te geven. Had het moeten noemen
toegevoegd de auteur meWantToLearn, de bron
U moet gebruikers-ID's en hun rollen niet in uw code coderen. Wat als je ooit een tweede beheerder wilde hebben? Of zet uw code over naar een andere server en begin met nieuwe id-nummers, ...
toegevoegd de auteur Zombaya, de bron

Maak twee sessievariabele zoals

$_SESSION['user']//can access only one page
$_SESSION['admin']//can access both

and check their existence by isset($_session['user']) or isset($_session['admin'])

1
toegevoegd
Kunt u mijn bijgewerkte code controleren om me te vertellen waar ik deze regels moet plaatsen?
toegevoegd de auteur La Myse, de bron

Wanneer de gebruiker met succes heeft geautoriseerd, controleer dan of hij een admin of een normale gebruiker is. Dus laten we zeggen voor de beheerder die u een admin-sessievariabele definieert

$_SESSION['admin_user'] = True

Controleer vervolgens vóór het weergeven van het admin gedeelte of de gebruiker de juiste rechten heeft.

if ($_SESSION['admin_user']) {
      //display admin content
}
else {
      print("Not available, you need admin privilege.");
}

Dus op basis van je code zou ik het aanpassen om er zo uit te zien:

<?php
  session_start(); //Start the session
  if( isset($_SESSION['admin']) && $_SESSION['admin_user'] ){ //If session registered and admin
     header( 'Content-Type: text/html; charset=utf-8' );
    //more content
   }
  else 
     header("location: login.php");//Redirect to login.php page
?>

Ook session_register is verouderd en van PHP 5.4 verwijderd, dus gebruik $ _SESSION [ 'variabele_naam'] in plaats daarvan.

1
toegevoegd
Voeg een andere kolom toe aan uw database om te definiëren welke gebruiker admin is en de waarde op te halen wanneer u zijn/haar gebruikersnaam en wachtwoord controleert.
toegevoegd de auteur golja, de bron
Ja, maar hoe gaat de site herkennen of de gebruiker een beheerder is, ik zal elke controle moeten uitvoeren?
toegevoegd de auteur La Myse, de bron