• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Skrypt logowania/wylogowywania w PHP.

Object Storage Arubacloud
0 głosów
617 wizyt
pytanie zadane 12 maja 2019 w PHP przez r.mar Początkujący (470 p.)

Dzień dobry. Od kilku godzin próbuję zrobić skrypt, który zabezpieczy stronę logowania (login.php) przed wpisaniem index.php. Czyli ma sprawdzać, czy jest sesja po zalogowaniu. Proszę o pomoc.

login.php

<?php
session_start();
?>


<!DOCTYPE HTML>

<html>
<head>
       <title>User Login and Registration</title>
       <link rel="stylesheet" type="text/css" href="style.css" >
       <link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" >
       <link rel="stylesheet" type="text/css" href="squarestyle.css">
</head>
       <body>
          <div class="nav-login">
       <form action="includes/login.inc.php" method="POST">
       <div id="login-kwad"></div>
       <div id="stopka"></div>
            <div id="form-wrapper">
       <div calss="container">
       <div class="login-box">
       <div class="col-md-6">
       <h2 style="color: white;">Login Here</h2>

       <div class="form-group">
       <label style="color: white;">E-Mail/Username<span>*</span></label>
       <input type="text" name="uid" class="form-control" placeholder="Username/Email" required />
       </div>
    <div class="form-group">
      <label style="color: white;">Password</label>
       <input type="password" name="pwd" class="form-control" placeholder="Password" required />
    </div>
       <button id="login-btn" type="submit" class="btn btn-primary"> Login </button>
       <button id="register-site" type="submit" class="btn btn-primary" onClick="window.location = 'signup.php'"> Register </button>
       </form>
       </div>
       </div>
           <div id="txt-stopka">
             <p>&copy; 2019 site.com</p>
            </div>
         
        
       </div>
       </div>
           </div>
        </div>

      </body>

</html>

login.inc.php:

<?php

session_start();

if (isset($_POST['submit']))
{
    include'dbh.inc.php';

    $uid = mysqli_real_escape_string($conn, $_POST['uid']);
    $pwd = mysqli_real_escape_string($conn, $_POST['pwd']);

    //Error handlers
    //Check if inputs are empty
    if (empty($uid) || empty($pwd))
    {
        header("Location ../login.php?login=empty");
        exit();
    }
    else
    {
       $sql = "SELECT * FROM users WHERE user_uid='$uid'";
       $result = msqli_query($conn, $sql);
       $resultCheck = mysqli_num_rows($result);
       if ($result < 1)
       {
         header("Location ../login.php?login=error");
         exit();
       }
       else 
       {
           if ($row = mysqli_fetch_assoc($result))
           {
               //De-hashing password
               $hashedPwdCheck = password_verify($pwd, $row['user_pwd']);
               if ($hashedPwdCheck == false)
               {
                header("Location ../login.php?login=error");
                exit();
               }
               elseif ($hashedPwdCheck == true)
               {
                  //Log in the user here
                  $_SESSION['u_id'] = $row['user_id'];
                  $_SESSION['u_first'] = $row['user_first'];
                  $_SESSION['u_last'] = $row['user_last'];
                  $_SESSION['u_email'] = $row['user_email'];
                  $_SESSION['u_uid'] = $row['user_uid'];
                  header("Location ../login.php?login=success");
                  exit();
               }

           }
       }
    }
}
else
{
   header("Location ../login.php?login=error");
   exit();
}

?>

 

3 odpowiedzi

0 głosów
odpowiedź 13 maja 2019 przez Krzysiuu Nowicjusz (140 p.)

Hej, żeby sprawdzić czy użytkownik jest zalogowany możesz użyć zmiennej którą przypisałeś do sesji, np. $_SESSION['u_uid'].

if(isset($_SESSION['u_uid']){
header('Location: zalogowany.php');
} else {
header('Location: zalogujsie.php');
}

 

komentarz 13 maja 2019 przez aleks365 Użytkownik (520 p.)

Nad

header('Location: zalogujsie.php');

można dodać jeszcze zmienną sesyjną z informacją o tym że tam ma dostęp tylko zalogowany użytkownik i z prośbą o zalogowanie się

–2 głosów
odpowiedź 12 maja 2019 przez Aleksander Kowalski Obywatel (1,510 p.)

Nie lepiej zrobić tak:

<?php

poczatek warunku co sprawdza z sesji wartosc czy jest użytkownik zalogowany

?>

kod strony

<?php

koniec warunku co sprawdza z sesji wartosc czy jest użytkownik zalogowany

?>

Przykład 

<?php  
            if (isset($_SESSION["nazwa_zmienej"]))
            {
?>
<body>
 <h1>witam</h1>
</body>
<?php
   }
          else
          {
            echo 'Zaloguj sie aby zyskać dostep';
            
          }
?>

 

–2 głosów
odpowiedź 13 maja 2019 przez HaKIM Szeryf (87,590 p.)

Najprościej to by było zaimplementować front controller pattern i tam sobie dołączyc komponent, który by odpowiadał za autoryzacje globalnie. W innym wypadku będziesz musiał do każdej strony nieprzeznaczonej dla użytkowników niezalogowanych dodawać tenże komponent - DRY. ^^

Może Ci się przydać:

https://symfony.com/doc/current/create_framework/front_controller.html

Podobne pytania

0 głosów
2 odpowiedzi 665 wizyt
pytanie zadane 17 marca 2018 w PHP przez Matim4 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 442 wizyt
pytanie zadane 6 września 2017 w PHP przez Forester Użytkownik (560 p.)

92,575 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...