2010-07-28 122 views
0

我使用的是PHP登录脚本,对用户名密码&挑战用户。防止用户FOM重新登录注销后通过点击后退按钮

一旦通过验证程序存储会话值。在注销时,会话值被设置为空白。

一旦登出我想避免让用户点击返回按钮几次,和博彩允许查看数据的屏幕或不期而遇登录自己回去。

我使用的会话,再直接到将验证的用户发送到新页面。我也使用ob_start,ob_flush和ob_end_clean来防止错误或重定向。

问题: 这是真的安全吗? 这是一个常用的方法吗?
有alterternative到缓冲?下面

是一个小的证明了概念。

<?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"; 
?> 

回答

0

你需要的是一个适当的退出方法,而不是测试会话数据。你希望这个会议得到彻底的消除。下面是一个例子,它记录用户并将用户登出并检查用户是否登录。当您单击登出页面时,您将自动注销并重定向。按返回,将不会改变任何东西,你仍然不会被记录。

的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"); 

希望这有助于为您揭开会议的神秘面纱。

1

我会与session_destroy()破坏会议,而不是仅仅把“LOGGED_IN”值“不”开始。

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

+0

吉兹似乎容易得多...... – 2010-07-28 20:52:00

相关问题