На каждой странице появляются файлы cookie для скрипта входа в систему PHP, как выйти из системы навсегда? - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь создать простую систему входа в систему на PHP.Это тестируется с использованием WAMP и открывается в веб-браузере Chrome.

Проблема, с которой я сталкиваюсь, заключается в том, что я могу создать сеанс и файл cookie, и даже удалить файл cookie в сценарии выхода из системы на любой странице.посещение из того же домена после запуска сценария выхода автоматически восстанавливает оба куки.Это кажется действительно странным, так как большинство других ответов, которые я видел, сталкиваются с противоположной проблемой смерти куки.

Мне кажется, это может быть проблема с запоминанием браузера, как будто я удаляю куки из хрома, обновление не воссоздаеткуки, но я не уверен, как смягчить это поведение.В его нынешнем виде это означает, что пользователи не могут по-настоящему выйти из системы.

Кроме того, я ценю, что это небезопасно, и md5 не является подходящим решением для пароля, но я просто пытаюсь создать простую функциональность перед добавлением этихin.

login.php:

session_start();
require_once('connect.php');// connects to DB
// check database username and password.
if (isset($_POST['username']) & !empty($_POST)){
    $username = mysqli_real_escape_string($connection, $_POST['username']);
    $password = md5($_POST['password']);

    // query login details to database
    $sql = "SELECT * FROM `database1` WHERE username='$username' AND password='$password'";
    $result = mysqli_query($connection, $sql);
    $count = mysqli_num_rows($result);
    // if logged in tell them.
    if(isset($_SESSION['username'])){
        $errors[] = "</strong> already logged in, please logout to switch user";
    } 

    //only if username and password correct test other factors
    if($count == 1){

        // create new cookie with data //look up sql
        $cookie_name = 'Cookie';
        setcookie($cookie_name, test, 0, "/", ""); 
        // create session
        $_SESSION['username'] = $username;
        $smsg =  "user is logged in.";
        location.href = "memberpage.html";

    } else{ 
         $errors[] = "invalid username or password";
    }

}
?>

<html>
<head>
</head>

<body>
<div class="container">
      <?php if(isset($smsg)&& !empty($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?>
            <?php if(isset($errors)){ 
      foreach ($errors as $error) {
      ?>
      <div class="alert alert-danger" role="alert"> <?php echo $error; ?> </div>
      <?php } }  ?>

      <form class="form-signin" method="POST">
        <h2 class="form-signin-heading">Please Log in</h2>
        <div class="input-group">
      <input type="text" name="username" class="form-control" placeholder="Username" value="<?php if(isset($username) & !empty($username)){ echo $username; } ?>" required>
    </div>
<label for="inputPassword" class="sr-only">Password</label>
        <input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required>
        <button class="btn btn-lg btn-primary btn-block" type="submit">Login</button>
        <a class="btn btn-lg btn-primary btn-block" href="register.php">Register</a>
      </form>
</div>
</body>
</html>

logout.php

<?php
session_start();
$_SESSION = array();
$cookie_name = 'Cookie';
setcookie( $cookie_name , '' , time() - 3600);
session_destroy();
if (!isset($_cookie[$cookie_name])){
//  header('location: login.php');
}
?>

1 Ответ

0 голосов
/ 10 декабря 2018

Согласно документации PHP здесь , вам также необходимо уничтожить cookie-файл идентификатора сеанса:

Чтобы полностью завершить сеанс, идентификатор сеанса также должен быть не установлен,Если файл cookie используется для распространения идентификатора сеанса (поведение по умолчанию), файл cookie сеанса должен быть удален.Для этого можно использовать setcookie ().

setcookie(session_name(), '', time() - 3600, '/', '');
...