2010-07-28 101 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

相關問題