Кнопка уничтожения сеанса PHP при выходе из системы - PullRequest
11 голосов
/ 25 января 2012

В настоящее время я работаю над сайтом, на котором есть вход (имя пользователя и пароль). Защита паролем осуществляется операционной системой на веб-сервере на уровне папок, называемой областью в ОС. Пока это нужно будет делать, пока мы не выясним правильную систему регистрации PHP.

Приведенный ниже код основан на предыдущем вопросе о переполнении стека.

Я использую 3 файла (см. Фрагменты кода внизу).

Процесс: - Нажмите кнопку «Войти» на index.php - Введите имя пользователя и пароль для доступа к файлу индекса аутентификации. - Нажмите кнопку выхода из системы, которая ссылается на файл logout.php - он ДОЛЖЕН очистить кеш и вернуть пользователю индекс верхнего уровня.

Это не «уничтожает сеанс» в том смысле, что вас не просят повторно вводить пароль при появлении соответствующего запроса, что, по сути, и должно происходить.

Мои минимальные знания php оставляют меня здесь в тупике.

index.php (файл верхнего уровня с кнопкой входа в систему)

<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test</title>
</head>
<body>
<a href="authenticate/index.php">Log In Btn</a>
</body>
</html>

authenticate / index.php (Эта папка защищена паролем - содержит индексный файл с кнопкой выхода из системы, который ссылается на файл logout.php)

<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Log out</title>
</head>
<body>
<a href="logout.php">Log Out Btn</a>
</body>
</html>

Аутентифицировать / logout.php

<?php   
session_start(); //to ensure you are using same session
session_destroy(); //destroy the session
header("location:/index.php"); //to redirect back to "index.php" after logging out
exit();
?>

Ответы [ 3 ]

26 голосов
/ 21 февраля 2013

Папка, защищенная паролем, имеет ничего общего с PHP!

Используемый метод называется «Базовая аутентификация».Нет кросс-браузерного способа «выйти» из него, кроме как попросить пользователя закрыть и затем открыть его браузер ...

Вот как вы можете вместо этого сделать это в PHP (полностью удалите Apacheбазовая аутентификация в .htaccess или где бы он ни был первым:

login.php:

<?php
session_start();
//change 'valid_username' and 'valid_password' to your desired "correct" username and password
if (! empty($_POST) && $_POST['user'] === 'valid_username' && $_POST['pass'] === 'valid_password')
{
    $_SESSION['logged_in'] = true;
    header('Location: /index.php');
}
else
{
    ?>

    <form method="POST">
    Username: <input name="user" type="text"><br>
    Password: <input name="pass" type="text"><br><br>
    <input type="submit" value="submit">
    </form>

    <?php
}

index.php

<?php
session_start();
if (! empty($_SESSION['logged_in']))
{
    ?>

    <p>here is my super-secret content</p>
    <a href='logout.php'>Click here to log out</a>

    <?php
}
else
{
    echo 'You are not logged in. <a href="login.php">Click here</a> to log in.';
}

logout.php:

<?php
session_start();
session_destroy();
echo 'You have been logged out. <a href="/">Go back</a>';

Очевидно, что это очень базовая реализация.Вы ожидаете, что имена пользователей и пароли будут в базе данных, а не в жестко заданном сравнении.Я просто пытаюсь дать вам представление о том, как выполнять сеанс.

Надеюсь, это поможет вам понять, что происходит.

6 голосов
/ 17 января 2017

Сначала дайте ссылку на страницу logout.php в этой кнопке выхода из системы. На этой странице введите код, приведенный ниже:

Вот код:

<?php
 session_start();
 session_destroy();
?>

Когда сеанс начался, сеанс для последнего / текущего пользователя был запущен, поэтому не нужно объявлять имя пользователя. Он будет автоматически удален методом session_destroy.

2 голосов
/ 19 февраля 2018

// Выйти

if(isset($_GET['logout'])) {
    session_destroy();
    unset($_SESSION['username']);
    header('location:login.php');
}

?>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...