Proste logowanie w PHP

Odpowiedz Nowy wątek
2017-03-27 09:53

Rejestracja: 4 lata temu

Ostatnio: 1 rok temu

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");

}

?>

Pozostało 580 znaków

2017-03-27 10:45

Rejestracja: 5 lat temu

Ostatnio: 5 dni temu

0

W czym konkretnie problem?

Pozostało 580 znaków

2017-03-27 10:54

Rejestracja: 5 lat temu

Ostatnio: 5 dni temu

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");

 }
edytowany 3x, ostatnio: Sumekprog, 2017-03-27 10:56

Pozostało 580 znaków

2017-03-27 11:39

Rejestracja: 4 lata temu

Ostatnio: 1 rok temu

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".

Pozostało 580 znaków

2017-03-27 11:52

Rejestracja: 5 lat temu

Ostatnio: 5 dni temu

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";
}
edytowany 5x, ostatnio: Sumekprog, 2017-03-27 11:56

Pozostało 580 znaków

2017-03-27 13:40

Rejestracja: 4 lata temu

Ostatnio: 4 dni temu

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à.

edytowany 2x, ostatnio: Desu, 2017-03-27 13:46

Pozostało 580 znaków

Odpowiedz

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