предотвратить вход пользователя из системы после выхода, нажав кнопку назад - PullRequest
0 голосов
/ 29 июля 2010

Я использую скрипт входа в PHP, который запрашивает у пользователя имя пользователя и пароль.

После аутентификации программа сохраняет значение сеанса. При выходе из системы значение сеанса установлено как пустое.

После выхода из системы я хочу не допустить, чтобы пользователь нажимал кнопку «Назад» несколько раз, а ставки позволяли увидеть экран данных или случайно войти в систему.

Я использую сеансы, переадресация для отправки проверенного пользователя на новую страницу. Я также использую ob_start, ob_flush и ob_end_clean для предотвращения ошибок или перенаправления.

Вопросы: Это действительно безопасно? Это общий подход?
Есть ли альтернатива буферизации?

ниже - небольшое подтверждение концепции.

<?php
header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");  
header("Pragma: public"); 
session_cache_limiter('nocache');
// I'm not sure how effective any of the above seem to be.

session_start();

// start buffering because if we use header later we want to avoid error
ob_start();

echo "Type <b>in</b> or <b>out</b> to login/logout<br>";
?>

 <form action='' method='POST'>
 <input type='text' name='status' size='10' value=""><br/><br/>

 <p>&nbsp;</p>
 <input type='submit' name='Login' value='Login' /></form></p>

<?php 
 if ($_POST['status'] == 'in')
 {
  $_SESSION['logged_in'] = 'in';  
  ob_end_clean();  // clean and erase buffer so far
        header('location:test2.php');        
        exit;
 }

 if ($_POST['status'] == 'out')
 {
  $_SESSION['logged_in'] = 'no';
  echo "you are logged out <br>";

 }
 ob_flush();   // push output
 echo "login status = " . $_SESSION['logged_in']  ;

?>



file test2.php
<?php
echo "You have logged in"; 
?>

Ответы [ 2 ]

1 голос
/ 29 июля 2010

Я бы начал с уничтожения сеанса с session_destroy(), а не просто установил бы значение 'logged_in' на 'нет'.

Затем просто проверьте, существует ли сеанс, чтобы проверить, вошел ли пользователь в систему.

0 голосов
/ 29 июля 2010

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

login.php

session_start();
$valid = someLoginFunctionHere();
if($valid) {
     $_SESSION['isLoggedIn'] = true;
     header("Location: homepage.php");
}

homepage.php

session_start();
// If they are not logged in, send them to login page
if(!isset($_SESSION['isLoggedIn'])) {
    header("Location: login.php");
}

// Normal homepage stuff
...

logout.php

session_start();
session_destroy();
header("Location: login.php");

Надеюсь, это поможет вам немного демистифицировать сессии.

...