Php 通过单击“后退”按钮防止用户fom在注销后重新登录

Php 通过单击“后退”按钮防止用户fom在注销后重新登录,php,session,buffering,login-script,Php,Session,Buffering,Login Script,我正在使用一个PHP登录脚本,向用户挑战用户名和密码 经过身份验证后,程序存储会话值。注销时,会话值设置为空白 一旦注销,我想避免让用户点击后退按钮几次,并允许查看数据屏幕或意外登录自己重新登录 我正在使用sessions,一种重新定向的方法,将已验证的用户发送到新页面。我还使用ob_start、ob_flush和ob_end_clean来防止错误或重新定向 问题: 这真的安全吗? 这是一种常见的方法吗? 缓冲是否有替代方案 下面是一个小的概念证明 <?php header("Cache-

我正在使用一个PHP登录脚本,向用户挑战用户名和密码

经过身份验证后,程序存储会话值。注销时,会话值设置为空白

一旦注销,我想避免让用户点击后退按钮几次,并允许查看数据屏幕或意外登录自己重新登录

我正在使用sessions,一种重新定向的方法,将已验证的用户发送到新页面。我还使用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"; 
?>

我将首先使用
会话销毁()
销毁会话,而不是将“logged\u in”值设置为“no”


然后只需检查会话是否存在,以查看用户是否已登录。

您需要的是正确的注销方法,而不是测试会话数据。您希望完全删除会话。下面是一个让用户登录和注销的示例,还可以检查用户是否登录。当您单击注销页面时,您将自动注销并重定向。单击“上一步”不会更改任何内容,您仍然无法登录

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");
希望这有助于为您揭开会议的神秘面纱