2014-01-30 2 views
0

Я работаю над секцией администратора, в которой есть страница входа с идентификатором входа и формой пароля. в моем админ разделе я много страниц говорят как login.php, st_admin.php, tmg_admin.php и т.д.не удалось ограничить сеанс для администрирования pager

, если я должен получить доступ к странице st_admin.php, то я могу получить к нему доступ, просто введя ссылку без ввода Логин пользователя и пароль.

Я хочу ограничить доступ ко всем страницам только через панель администратора. Никто не может получить доступ к какой-либо странице, набрав URL напрямую. как это возможно??

login.php код:

<?php require_once('conn/conn.php'); ?> 
<?php 
    // *** Validate request to login to this site. 
    session_unset(); 
    session_start(); 

    $loginFormAction = $_SERVER['PHP_SELF']; 
    if (isset($accesscheck)){ 
    $GLOBALS['PreUrl']=$accesscheck; 
    session_register('PreUrl'); 
    } 

    if (isset($_POST['staffid'])) { 
    $loginUsername=$_POST['staffid']; 
    $password=md5($_POST['password']); 
    $MM_fldUserAuthorization = "accessid"; 
    $MM_redirectLoginSuccess = "staff/st_admin.php"; 
    $MM_redirectLoginFailed = "login.php?error=1"; 
    $MM_redirecttoReferrer = false; 
    mysql_select_db($database_conn, $conn); 

    $LoginRS__query=sprintf("SELECT staffid, password, teamcode, accessid FROM tbl_staff WHERE staffid='%s' AND password='%s'", 
    get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password)); 
    $LoginRS = mysql_query($LoginRS__query, $conn) or die(mysql_error()); 
    $loginFoundUser = mysql_num_rows($LoginRS); 

if ($loginFoundUser) { 

    $loginStrGroup = mysql_result($LoginRS,0,'accessid'); 

    //declare two session variables and assign them 
    $GLOBALS['MM_Username'] = $loginUsername; 
    $GLOBALS['MM_UserGroup'] = $loginStrGroup;   

    //register the session variables 
    session_register("MM_Username"); 
    session_register("MM_UserGroup"); 

    if (isset($_SESSION['PrevUrl']) && false) { 
    $MM_redirectLoginSuccess = $_SESSION['PrevUrl']; 
} 
switch ($loginStrGroup) { 
    case $MM_fldUserAuthorization='2': 
$_SESSION['staffid']=$loginUsername; 
    header("Location: tutor/tr_admin.php"); 
    break; 
case $MM_fldUserAuthorization='3': 
$_SESSION['staffid'] = $loginUsername; 
header("Location: manager/mg_calendar.php"); 
break; 
default: 
$_SESSION['staffid'] = $loginUsername; 
header("Location: " . $MM_redirectLoginSuccess); 
} 
    } else { 
    header("Location: ". $MM_redirectLoginFailed); 
    } 
} 
?> 

st_admin.php код:

<?php 
session_start(); 
$MM_authorizedUsers = ""; 
$MM_donotCheckaccess = "true"; 

    // *** Restrict Access To Page: Grant or deny access to this page 
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { 
// For security, start by assuming the visitor is NOT authorized. 
$isValid = False; 

// When a visitor has logged into this site, the Session variable MM_Username set equal to their username. 
// Therefore, we know that a user is NOT logged in if that Session variable is blank. 
if (!empty($UserName)) { 
// Besides being logged in, you may restrict access to only certain users based on an ID established when they login. 
// Parse the strings into arrays. 
$arrUsers = Explode(",", $strUsers); 
$arrGroups = Explode(",", $strGroups); 
if (in_array($UserName, $arrUsers)) { 
    $isValid = true; 
} 
// Or, you may restrict access to only certain users based on their username. 
if (in_array($UserGroup, $arrGroups)) { 
    $isValid = true; 
} 
if (($strUsers == "") && true) { 
    $isValid = true; 
    } 
} 
return $isValid; 
} 
?> 

Я очень признателен за любые советы.

ответ

0

Обычно у меня есть файл authentication.php, который включен на каждую страницу, которая должна быть аутентифицирована. Этот класс должен проверять подлинность сеанса перед загрузкой страницы.

Если пользователь не аутентифицирован, вы можете установить глобальные переменные или просто умереть с сообщением об ошибке.

Если у вас есть админ-сервер, вам может понадобиться второй authentication.php для обработки admin.

Если у каждой страницы вашего сайта есть это, никто не сможет напрямую обращаться к URL-адресу.

Могут быть и другие/лучшие способы сделать это с помощью аутентификации HTTP Apache.

0

, если у вас есть файл, который вы можете или же включать во всех других ваших страницах вы можете сделать:

define("NOACCESS", "dkgjeifnt");//just some random text 

Теперь на ваших страницах вы хотите прекратить прямой доступ к вы можете добавить:

if (! defined("NOACCESS")); 
{ 
    echo "You can not access this page directly" 
    return; 
} 
+0

Я хотел бы убедиться, что код будет добавлен в St.admin.php и после возврата $ isValid; }? – Mahou

+0

Я попробовал, он не может работать над «NOACCESS» !! – Mahou

+0

, вы должны добавить его в начало любого файла, к которому вы пытаетесь ограничить доступ. таким образом, скрипт перестает выполняться, когда он попадает в эту строку. – KyleMassacre

1

, если кто-то типы в URL непосредственно реферер пуст, так, возможно, сделать чек на этой

if (!isset($_SERVER["HTTP_REFERER"])) 
{ 
    header("Location: index.php"); 
    return; 
} 

Это отправит их в любом месте, если ваш референт не будет установлен.

Смежные вопросы