Proste logowanie w PHP

0

Cześć,

Zacząłem się uczyć PHP i chciałem zrobić sobie prosty skrypt, który ma obsługiwać imitowanie logowania i wylogowywania. Np. na stronie mam link Zaloguj, po którego kliknięciu ma się wyświetlić "Zalogowany". Jeśli odpalę skrypt jeszcze raz komunikat "Zalogowany" ma tam być dopóki nie kliknę Wyloguj (wtedy ma mnie przenieść z powrotem do ekranu logowania. Chcę to zrobić na sesjach. Do tej pory mam coś takiego. Niestety nie idzie mi to. Nie wiem co dalej. Nie wiem czy jest sens robić to w dwóch plikach...

Pierwszy skrypt log.php (do zalogowania)

<a href="log.php">zaloguj</a>

<?php


session_start();

$_SESSION['logged'] = 1;

if($_SESSION['logged']==1)
{
     echo "Zalogowany";
}
?>

Drugi skrypt out.php (do wylogowania)

<a href="log.php">wyloguj</a>

<?php
session_start();

$_SESSION['logout'] = 'out';

if($_GET['logout']== 'out')
{
  unset($_SESSION['logged']);
  header("location: log.php");
  

}


?>
0

W czym konkretnie problem?

1

Poczytaj także po co jest $_GET, nie pobierasz tym sesji, tylko wartość z URL
Powinieneś zrobić tak

 if($_SESSION['logout']=== 'out')
{
 unset($_SESSION['logged']);
header("location: log.php");
  

 }

0

Dzięki za odpowiedź, ale to nadal nie rozwiązuje mojego problemu. Po odpaleniu skryptu log.php od razu wyświetla mi link "Zaloguj" i od razu komunikat Zalogowany. Chce by ten komunikat wyświetlał się po kliknięciu w link "Zaloguj".

1
Skynet12 napisał(a):

Dzięki za odpowiedź, ale to nadal nie rozwiązuje mojego problemu. Po odpaleniu skryptu log.php od razu wyświetla mi link "Zaloguj" i od razu komunikat Zalogowany. Chce by ten komunikat wyświetlał się po kliknięciu w link "Zaloguj".

<a href="out.php">wyloguj</a>

A co do komunikatu to zrób coś w ten sposób

<form method="POST" action="log.php">
<input type="submit" name="loguj">
</form>

log.php

session_start();
 
$_SESSION['logged'] = 1;
 
if(isset($_POST['loguj']) && $_SESSION['logged']==1)
{
     echo "Zalogowany";
}
2

Poniżej są trzy pliki:

  • index.php - wyświetla guzki w zależności od tego, czy ktoś jest zalogowany, czy też nie i to jest jego jedyna rola. Jest to również jedyny plik, który wyświetla html.
  • login.php - jeżeli użytkownik nie jest już zalogowany, to go loguje i przekierowuje na index.php. Nie wyświetla html'a.
  • logout.php - jeżeli użytkownik jest zalogowany, to usuwa wartości w tablicy $_SESSION, które trzymają informację o tym czy użytkownik jest zalogowany i przekierowuje na index.php. Nie wyświetla html'a.
<?php
// index.php
session_start();

$logged_in = isset($_SESSION['logged_in']) ? $_SESSION['logged_in'] : false;

$user = null;
if ($logged_in) {
    $user = $_SESSION['user'];
}
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Welcome</title>
</head>
<body>
    <?php if($logged_in): ?>
        Zalogowany jako: <?= $user['first_name'] . " " . $user["last_name"]; ?> <br>
        <a href="logout.php">Wyloguj</a>
    <?php else: ?>
        <a href="login.php">Zaloguj</a>
    <?php endif; ?>
</body>
</html>
<?php
// login.php
session_start();

$logged_in = isset($_SESSION['logged_in']) ? $_SESSION['logged_in'] : false;

if (!$logged_in) {
    // normalnie w tym miejscu byś sprawdzał
    // login i hasło oraz pobieral usera z bazy,
    // ale nasz skrypt jest prosty, więc się tym nie przejmujemy :)
    $_SESSION['user'] = [
        'first_name' => 'Kamil',
        'last_name' => 'Latosiński'
    ];
    $_SESSION['logged_in'] = true;
}

// redirect to homepage
header('Location: /');
<?php
// logout.php
session_start();

$logged_in = isset($_SESSION['logged_in']) ? $_SESSION['logged_in'] : false;

if ($logged_in) {
    unset($_SESSION['logged_in'], $_SESSION['user']);
}

// redirect to homepage
header('Location: /');

Jeżeli masz PHP dodany do PATH, to możesz użyć wbudowanego serwera PHP. Wchodzisz do katalogu, gdzie umieściłeś plik index.php i robisz:

php -S localhost:4000

Teraz otwierasz przeglądarkę, wchodzisz pod adres localhost:4000 i voilà.

1 użytkowników online, w tym zalogowanych: 0, gości: 1