Kirjautuminen session avulla PHP:llä

Kirjautumisemme pitäisi toimia seuraavasti: käyttäjä, joka haluaa kirjautua sivustolle, menee sivulle login.php, syöttää oikeat käyttäjätunnuksen ja salasanan ja sitten liikkuu sivuston sivuilla jo kirjautuneena.

Jotta muut sivuston sivut tietäisivät, että käyttäjämme on kirjautunut, meidän täytyy tallentaa sessioon merkintä siitä.

Toistaiseksi kirjautumisemme ei ole aivan toimiva, sillä sessiota emme ole vielä ottaneet käyttöön ja muut sivuston sivut eivät voi tunnistaa, onko käyttäjä kirjautunut vai ei.

Tallennamme kirjautumismerkinnän sessio-muuttujaan $_SESSION['auth'] - jos sinne on kirjoitettu true, niin käyttäjä on kirjautunut, ja jos null - niin ei ole kirjautunut.

Tehdään vastaava muutos koodiimme:

html<?php
  session_start();
  
  if (!empty($_POST['password']) and !empty($_POST['login'])) {
    $login = $_POST['login'];
    $password = $_POST['password'];
    
    $query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
    $res = mysqli_query($link, $query);
    $user = mysqli_fetch_assoc($res);
    
    if (!empty($user)) {
      $_SESSION['auth'] = true;
    } else {
      // väärä käyttäjätunnus tai salasana
    }
  }
?>

Nyt missä tahansa sivuston sivussa voimme tarkistaa, onko käyttäjä kirjautunut vai ei, seuraavalla tavalla:

html<?php
  if (!empty($_SESSION['auth'])) {
    
  }
?>

Voit suojata jonkin sivun tekstin kokonaan kirjautumattomilta käyttäjiltä:

html<?php if (!empty($_SESSION['auth'])): ?>
  <!DOCTYPE html>
  <html>
    <head>
      
    </head>
    <body>
      <p>teksti vain kirjautuneille käyttäjille</p>
    </body>
  </html>
<?php else: ?>
  <p>ole hyvä ja kirjaudu sisään</p>
<?php endif; ?>

Voit suojata vain osan sivusta:

html<!DOCTYPE html>
<html>
  <head>
    
  </head>
  <body>
    <p>teksti kaikille käyttäjille</p>
    <?php
      if (!empty($_SESSION['auth'])) {
        echo 'teksti vain kirjautuneille käyttäjille';
      }
    ?>
    <p>teksti kaikille käyttäjille</p>
  </body>
</html>
Задание 1

Oletetaan, että sivustollamme, sivun login.php lisäksi, on myös sivut 1.php, 2.php ja 3.php. Tee niin, että näille sivuille pääsevät käsiksi vain kirjautuneet käyttäjät.

Задание 2

Oletetaan, että sivustollamme on myös sivu index.php. Tee niin, että osa tästä sivusta on avoinna kaikille käyttäjille, ja osa - vain kirjautuneille.

Задание 3

Muokkaa koodiasi niin, että onnistuneen kirjautumisen yhteydessä sessioon tallennetaan myös käyttäjän käyttäjätunnus.

Задание 4

Tee niin, että kun käyttäjä menee mille tahansa sivuston sivulle, kirjautunut käyttäjä näkee oman käyttäjätunnuksensa, ja kirjautumaton - linkin kirjautumissivulle.