2016-12-10 2 views
-1

Я хочу, чтобы вывести пользователя из системы, когда они нажимают на ссылку выхода, и это работает, но есть проблема. Когда я нажимаю ссылку на выход, пользователь выходит из системы и переходит на страницу заголовка, но если я нажму кнопку «Назад», я вернусь назад на предыдущую страницу, не войдя снова, и это небезопасно. Когда пользователь выходит из системы, я хочу, чтобы они были полностью отключены, и единственный способ вернуться - это войти. Может кто-нибудь помочь?PHP Выйти из системы полностью

<?php  
include("connect.php"); 

//check if form is submitted 
if ($_SERVER['REQUEST_METHOD'] != 'POST' || 
    ! isset($_POST['signin'])) 
{ 
    // looks like a hack, send to index.php 
    header('Location: index.php'); 
    exit; 
} 

if (empty($_POST["usernam"])) { 
    echo 'fill in username to sign in'; 
} 
if (empty($_POST["pw"])) { 
    echo 'fill in password to sign in'; 
} 

$sql = "SELECT pw FROM users WHERE usernam = ?"; 

$stmt = mysqli_prepare($conn, $sql); 
if (!$stmt) { 
    echo mysqli_error($conn); 
    exit; 
} 

$stmt->bind_param('s', $_POST['pw']); 
$stmt->execute(); 

if (!$stmt) { 
    echo mysqli_error($conn); 
    exit; 
} 
// we found a row with that username, 
// now we need to check the password is correct 

// get the password from the row 
$stmt->bind_result($hashed_pwd); 
$stmt->fetch(); 

if (password_verify($_POST['pw'], $hashed_pwd)) { 
    // password verified 
      header('Location: home.php'); 
} else { 
    echo 'Incorrect username or Password. <a href= index.php>Try again</a><br />'; 
} 

?> 

logout.php

session_start(); 
session_destroy(); 
header('location:index.php'); 

process2.php (Логин):

include("connect.php"); 

    //check if form is submitted 
    if ($_SERVER['REQUEST_METHOD'] != 'POST' || 
    ! isset($_POST['signin'])) 
    { 
    // looks like a hack, send to index.php 
    header('Location: index.php'); 
    exit; 
    } 

    if (empty($_POST["usernam"])) { 
    echo 'fill in username to sign in'; 
    } 
    if (empty($_POST["pw"])) { 
    echo 'fill in password to sign in'; 
    } 

    $sql = "SELECT pw FROM users WHERE usernam = ?"; 

    $stmt = mysqli_prepare($conn, $sql); 
    if (!$stmt) { 
    echo mysqli_error($conn); 
    exit; 
    } 

    $stmt->bind_param('s', $_POST['pw']); 
    $stmt->execute(); 

    if (!$stmt) { 
    echo mysqli_error($conn); 
    exit; 
    } 
    // we found a row with that username, 
    // now we need to check the password is correct 

    // get the password from the row 
    $stmt->bind_result($hashed_pwd); 
    $stmt->fetch(); 

    if (password_verify($_POST['pw'], $hashed_pwd)) { 
    // password verified 
      header('Location: home.php'); 
    } else { 
    echo 'Incorrect username or Password. <a href= index.php>Try again</a><br />'; 
    } 
+1

Ну, как вы это делаете ДЕЙСТВИТЕЛЬНО зависит от того, как вы отслеживаете зарегистрированных пользователей. Показать код из вашего сценария входа, и это должно дать нам несколько подсказок. – RiggsFolly

+1

Используете ли вы сеанс? – Fabio

+0

Я обновлю свой вопрос – mkd

ответ

1

На предыдущей странице (и все другие страницы, требующие входа), необходимо добавить условие который проверяет, вошел ли пользователь в систему (т.е. если установлена ​​переменная сеанса для входа пользователя). Это будет отображать содержимое, только если пользователь вошел в систему

Позвольте мне это немного разработать и помочь вам пример:.

index.php

session_start(); 
if(isset($_SESSION['username'])) { 
    echo "Welcome to my website! You are logged in."; 
    // do stuff... 
else { 
    header("Location: login.php"); // redirects user to login page if the username session variable is not set 
} 

home.php и должны работать на основе всех других страниц по той же концепции, что и выше:

session_start(); 
if(isset($_SESSION['username'])) { 
    echo "page when user is logged in"; 
    // do stuff... 
else { 
    header("Location: login.php"); 
} 

Затем вам нужно добавить переменную сеанса в кодовый блок внутри вашего входа p возраст, когда он проверяет, если пароль правильный, и пользователь вошел в систему:

session_start(); 
// ... (your other code) ... 
if (password_verify($_POST['pw'], $hashed_pwd)) { 
    // password verified 
    $_SESSION['username'] = $_POST["usernam"]; 
    header('Location: home.php'); 
} else { 
    echo 'Incorrect username or Password. <a href= index.php>Try again</a><br />'; 
} 

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

session_start(); 
if(isset($_SESSION['username'])) { 
    unset($_SESSION['username']); 
    session_destroy(); 
    echo "succesfully logged out!"; 
    header('refresh:5;location:index.php'); // redirect to index.php in 5 seconds 
} 
else { 
    echo "you are not logged in!"; 
} 

Использование session_destroy() только не хватает, как переменные сеанса как-то все еще установлены после уничтожения сеанса. См. Первый пример PHP's documentation.

+0

Я обновлю свой вопрос – mkd

+1

Это должен быть комментарий – Fabio

+1

Я не понимаю, почему ответ Брайана сокращен, учитывая очень ограниченные детали/код в вопросе. Это ИМХО, несколько отвечает на вопрос. –

Смежные вопросы