我創建了一個用於gameserver管理的小型php站點,但它不會強制用戶登錄時未登錄。如果會話未處於活動狀態,我已添加了重定向,並在註銷時銷燬了會話。該網站在這裏http://zelware.co.uk/gameman將PHP重定向到登錄頁面,而不是強制登錄
它迫使你第一次登錄,但如果你從URL登錄login.php它可以讓你再次進入主區域。任何幫助將不勝感激,謝謝!
我創建了一個用於gameserver管理的小型php站點,但它不會強制用戶登錄時未登錄。如果會話未處於活動狀態,我已添加了重定向,並在註銷時銷燬了會話。該網站在這裏http://zelware.co.uk/gameman將PHP重定向到登錄頁面,而不是強制登錄
它迫使你第一次登錄,但如果你從URL登錄login.php它可以讓你再次進入主區域。任何幫助將不勝感激,謝謝!
你需要一個if語句
$_SESSION['loggedin']==TRUE;
,以檢查是否有人登錄或沒有。 也考慮設置session_id()並重定向。
這是如此糟糕,每個人都可以使用工具創建一個會話,所以只需登錄= true就是驗證登錄身份的最不安全的方式。 –
不!這是一個誤解。我沒有說過上面的內容。 –
來驗證用戶身份,你需要一種簡單的機制:
所有的頁面應該檢查這看起來對於一些會話值進行保護,並重定向到登錄頁面,如果這個值是不存在的。您可以將此檢查的代碼寫入單獨的函數/文件中,並在您網站的每個頁面中調用/包含它。
is_user_logged_in(){
return $_SESSION['logged_in']; // it is a boolean value, which should be set TRUE by the login function
}
//in every page of yours you should call this
if (!is_user_logged_in()){
//redirect to you login page
header("Location: http://yoursitename.com/login_page.php");
}
登錄頁面應該驗證用戶名/密碼,如果有效,創建你檢查在所有其他網頁會話值。
if (valid_user($username, $password)){
// this is the value you should check for in other pages
$_SESSION['logged_in'] = TRUE;
// you may also need to store other user-related info in the session
$_SESSION['user'] = array("id" => 1 , "username" => "test_user") // a data array from DB
}
註銷頁面應該銷燬您在其他頁面檢查的會話值。
unset($_SESSION['logged_in']);
session_destroy();
您需要創建一種機制,如果用戶登錄驗證 在登錄時,系統將設置一個會話cookie - 一個隨機的,獨一無二的哈希值。哈希存儲爲一個cookie,以及數據庫中的用戶名,密碼,IP和登錄時間。
當用戶訪問該頁面時,可以調用一個看起來有點像這樣的函數:(不完全一樣,這不是很好,只是基本檢查,你還應該檢查IP是否匹配,以及會話是否有過期)
function verify_login() {
//
$hash = $_COOKIE['loginhash'];
if($hash != ''):
$hash = mysql_real_escape_string($hash);
$sql = "SELECT * FROM session WHERE hash = '$hash'";
else:
header('Location: login.php');
endif;
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) !=0):
while($row = mysql_fetch_assoc($res)) {
echo 'The user is logged in.';
}
else:
header('Location: login.php');
endif;
}
如果沒有您的代碼或您嘗試過的代碼(特定代碼),我們幾乎無法爲您提供幫助。 – Think
它可能會有助於調試,如果你有會話+重定向代碼 –
然後檢查每個頁面上的會話,並顯示一些代碼,你試圖與之相關的,因爲你可能會搞砸了某個地方。 –