Avatar billede frasa Juniormester
21. februar 2022 - 09:14 Der er 14 kommentarer og
1 løsning

Login multisuer med session

Hej

Jeg har brug for lidt hjælp til et multi bruger login i php.
Min intention er at kunne have et login script med flere brugere og differentieret redirect. Har stykket nedenstående sammen og virker efter hensigten. Men jeg mangler en dimmension som skal definere en rolle, og dermed sikre at man ikke kan få adgang til andre sider end den side der rediredtes til.

Er det muligt? Altså uden at koble en mysql database på?

Nedenstående php har jeg på min login side:

<?php session_start(); /* Starts the session */
/* Check Login form submitted */
if(isset($_POST['Submit'])){
/* Define username and associated password array */
$logins = array('user1' => 'Cykel7','user2' => 'Sommer21','user3' => 'Fredag24');
$logins2 = array('user4' => 'Mandag22', 'user5' => 'Tirsdag22');
$logins3 = array('user6' => 'Monday22');
$logins4 = array('user7' => 'Friday44');
$logins5 = array('user8' => 'Summer55');

/* Check and assign submitted Username and Password to new variable */
$Username = isset($_POST['username']) ? $_POST['username'] : '';
$Password = isset($_POST['password']) ? $_POST['password'] : '';

/* Check Username and Password existence in defined array */
if (isset($logins[$Username]) && $logins[$Username] == $Password){
/* Success: Set session variables and redirect to Protected page  */
    $_SESSION['UserData']['Username']=$logins[$Username];
        header("location:index.php");
        exit;

} else if (isset($logins2[$Username]) && $logins2[$Username] == $Password) {
/* Success: Set session variables and redirect to Protected page  */
    $_SESSION['UserData']['Username']=$logins2[$Username];
        header("location:/Site1/index.php");
        exit;

} else if (isset($logins3[$Username]) && $logins3[$Username] == $Password) {
    /* Success: Set session variables and redirect to Protected page  */
    $_SESSION['UserData']['Username']=$logins3[$Username];
        header("location:/Site2/index.php");
        exit;

} else if (isset($logins4[$Username]) && $logins4[$Username] == $Password) {
    /* Success: Set session variables and redirect to Protected page  */
    $_SESSION['UserData']['Username']=$logins4[$Username];
        header("location:/Site3/index.php");
        exit;

} else if (isset($logins5[$Username]) && $logins5[$Username] == $Password) {
        /* Success: Set session variables and redirect to Protected page  */
        $_SESSION['UserData']['Username']=$logins5[$Username];
            header("location:/Site4/index.php");
            exit;
   
   
} else {
/*Unsuccessful attempt: Set error message */
$msg="<div class='alert alert-danger' role='alert'>Invalid Login Details</div>"; } } ?>


På hver side tjekker jeg for at userdata og username er udfyldt med:

<?php session_start(); /* Starts the session */ if(!isset($_SESSION['UserData']['Username'])){
  header("location:login.php");
  exit;
  }
  ?>


Håber der er en venlig sjæl som vil hjælpe mig med at få verificeret om jeg kan løse det med en ekstra dimmension, uden at koble det op mod en mysql database.
Avatar billede Rune1983 Ekspert
21. februar 2022 - 09:42 #1
Kan du ikke gemme en session variabel med hvilket site der redirectes til.
På hver site kontrolleres den session variabel.
Avatar billede frasa Juniormester
21. februar 2022 - 09:51 #2
Hej Rune 1983

Hvordan tænker du at jeg kan gemme redirect informationen i en variabel?
Jeg er temmelig meget begynder endnu, så jeg kan ikke lige gennemskue hvordan jeg gør det. Kan du vejlede mig lidt mere?
Avatar billede frasa Juniormester
21. februar 2022 - 09:59 #3
Kan man gøre det sådan?


if (isset($logins[$Username]) && $logins[$Username] == $Password){
/* Success: Set session variables and redirect to Protected page  */
    $_SESSION['UserData']['Username']=$logins[$Username];
    $_SESSION['SITE'] = 'SITE1';
        header("location:index.php");
        exit;

}

og tjekke på siden

<?php session_start(); /* Starts the session */ if(!isset($_SESSION['UserData']['Username']) && ($_SESSION['SITE'] = 'SITE1')){
  header("location:login.php");
  exit;
  }
  ?>
Avatar billede Rune1983 Ekspert
21. februar 2022 - 10:25 #4
Ligesom Frusa har skrevet. Vil mene det giver det som du søger.
Avatar billede frasa Juniormester
21. februar 2022 - 10:31 #5
Hej Rune1983

Det var mig selv der kom op med den løsning.
:-)

Men det gav ikke det ønskede resultat.
Det er stadig muligt at bevæge sig mellem de forskellige sider ved at rette siden i url'en.
Avatar billede Rune1983 Ekspert
21. februar 2022 - 12:37 #6
$_SESSION['SITE'] == 'SITE1')
Avatar billede frasa Juniormester
21. februar 2022 - 13:39 #7
Det gør desværre ingen forskel.
Jeg kan godt tilgå sider hvor jeg har sat session til at SITE1 men hvor jeg har sat:

<?php session_start(); /* Starts the session */ if(!isset($_SESSION['UserData']['Username']) && ($_SESSION['SITE'] = 'SITE2')){
  header("location:login.php");
  exit;
  }
  ?>

det kan jeg se ved at tilføje i min body
<?php echo $_SESSION['SITE']; ?>

Kan det være fordi jeg slutter php inden jeg er færdig med min HTML side
[i]
<?php session_start(); /* Starts the session */ if(!isset($_SESSION['UserData']['Username']) && ($_SESSION['SITE'] = 'SITE2')){
  header("location:login.php");
  exit;
  }
  ?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta http-equiv=”Pragma” content=”no-cache”>
<meta http-equiv=”Expires” content=”-1″>
<meta http-equiv=”CACHE-CONTROL” content=”NO-CACHE”>   
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png">
<link rel="manifest" href="site.webmanifest" crossorigin="use-credentials">   
og så videre.
Avatar billede Rune1983 Ekspert
21. februar 2022 - 14:00 #8
Har du prøvet med 2 ligmed tegn i if sætning?
($_SESSION['SITE'] == 'SITE2')
Avatar billede Rune1983 Ekspert
21. februar 2022 - 14:02 #9
<?php session_start(); /* Starts the session */ if(!isset($_SESSION['UserData']['Username']) OR ($_SESSION['SITE'] != 'SITE2')){
  header("location:login.php");
  exit;
  }
  ?>

Du skal faktisk anvende forskellig fra og ikke lig med.
Og du skal nok anvende OR. Så hvis bare en af tingene ikke er sat korrekt. Så henvises til login side
Avatar billede Rune1983 Ekspert
21. februar 2022 - 14:04 #10
Ej. Jeg er vist ved at være lidt træt.
Bruger skal være logget ind plus site session skal match ... ellers henvis til login side.
Avatar billede frasa Juniormester
21. februar 2022 - 14:55 #11
Hvis jeg på login siden sætter

if (isset($logins[$Username]) && $logins[$Username] == $Password){
/* Success: Set session variables and redirect to Protected page  */
    $_SESSION['UserData']['Username']=$logins[$Username];
    $_SESSION['SITE'] = 'SITE1';
        header("location:index.php");
        exit;

og efterfølgende på siden jeg redirecter til

<?php session_start(); /* Starts the session */ if(!isset($_SESSION['UserData']['Username']) || ($_SESSION['SITE'] != 'SITE2' || 'SITE3' || 'SITE4')){
  header("location:login.php");
  exit;
  }
  ?>

Så bliver jeg bare smidt tilbage på loginsiden, og kommer dermed ikke ind
hvad er det jeg mangler(gør forkert).... tror efterhånden på at det kan lykkedes.
Avatar billede frasa Juniormester
21. februar 2022 - 15:03 #12
#10

Så "AND eller &&?
Har prøvet. Jeg blokerer ikke da UserData og Username er sat.
Avatar billede frasa Juniormester
21. februar 2022 - 15:46 #13
Var umådelig blind.
Det er jo fordi UserData og Username var sat ens ved alle 5 forskellige logins.
Ved at lave en variation  UserData2 og Username2 lykkedes det.
Avatar billede nemlig Professor
21. februar 2022 - 15:51 #14
if(!isset($_SESSION['UserData']['Username']) || ($_SESSION['SITE'] != 'SITE2' || 'SITE3' || 'SITE4')){

prøv:
if(!isset($_SESSION['UserData']['Username']) || ($_SESSION['SITE'] != 'SITE2' || $_SESSION['SITE'] !='SITE3' || $_SESSION['SITE'] !='SITE4')){


Forstår dog ikke lige målet med denne if-sætning, da den altid vil være True.

Måske tanken er:
if(!isset($_SESSION['UserData']['Username']) || ($_SESSION['SITE'] == 'SITE2' || $_SESSION['SITE'] =='SITE3' || $_SESSION['SITE'] =='SITE4')){
Avatar billede Rune1983 Ekspert
22. februar 2022 - 06:57 #15
Godt du fandt løsningen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester