如何在使用php注销后终止会话

时间:2015-04-28 12:29:41

标签: php html

我已经看到了以下问题,并尝试调整部分答案,但没有运气:'如何在用户按下注销并销毁会话后禁用后退浏览器按钮?'

我知道这个话题已经讨论很多,人们讨厌禁用后退按钮。但是如果我有一个包含重要信息的数据库,那么一旦该人退出,我如何阻止某人从后退按钮返回上一页。

如果已经看到一个答案,以下可以回答这个问题: 我故意破坏后退按钮使用的一种方法是在应用程序内的每个URL上以及每个表单中传递一个令牌。令牌在每个页面上重新生成,一旦用户加载新页面,前一页面中的任何令牌都将失效。当用户加载页面时,该页面将仅显示是否将正确的令牌(已提供给上一页上的所有链接/表单)传递给它。任何人都可以提供有关如何执行此操作的一些信息?

<?php 
session_start();
session_destroy();
$_SESSION = array();
header("location: login.php");
?>

标题应该放在哪里?

header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");



<?php
session_start(); //starts the session
if($_SESSION['user']){ //checks if user is logged in
}
else{
    header("location:login.php"); // redirects if user is not logged in
}
$username = $_SESSION['user']; //assigns user value
$id_exists = false;
?>

我有一个checklogin.php,用于检查用MySQL数据库中存储的用户名和密码。然后将它们重定向到file1.php。在此页面上有一个注销按钮。上面的代码存储在logout.php。

当用户退出时,我不希望他们通过按后退按钮再次访问该文件。谢谢

2 个答案:

答案 0 :(得分:1)

至于标题,以下是我在搜索后经常使用的网络服务器:

Cache-Control: private, pre-check=0, post-check=0, max-age=0
Expires: 0
Pragma: no-cache

点击结果页面中的链接后按后退按钮会在Firefox中显示错误消息。我看到的唯一值得注意的差异是Expire: 0

答案 1 :(得分:0)

登录页面:

<?php 
if (isset($_POST['uname'], $_POST['pwd'], $_POST['type'])) {
    $Username = $_POST['uname'];
    $Password = $_POST['pwd'];
    $User_Type=$_POST['type'];
    if (!(empty($Username) || empty($Password) || empty($User_Type))) 
    {
         $model = new UsersModel();
         $rowsCount = $model->checkUser($Username,$Password,$User_Type);
         if ($rowsCount!=0)
         {
              $_SESSION['user'] = $Username;
              header("Location:LoginViewController.php");

         } else {
              echo 'Bad user';
         }
    } else {
         echo 'Please, fill all inputs';
    }
} else {
    echo 'Bad form sent';
}
?>
 <form name="f1" method="POST" action="" >
// inputs
 </form>

LoginViewController.php:

<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit();
}
echo 'You have successfully logged as '.$_SESSION['user']
?>

添加标题以强制浏览器重新验证页面:

logout.php:

<?php 
session_start();
session_destroy();
$_SESSION = array();
header("location: login.php");
?>