2014-01-24 3 views
0

Вот моя форма для входа. aka index.phpВеб-сайт Переадресация, если вы не авторизованы

<form class="form-3" action="login.php?log=ok" method="post" > 
    <input type="text" name="username" id="login" placeholder="Username"> 
    <input type="password" name="password" id="password" placeholder="Password"> 
    <input type="submit" name="submit" value="Submit">      
</form> 

И вот моя проверка входа. ака login.php

<?php 
require_once 'classes/Personel.php'; 
$personel = new Personel(); 
$personel->setUsername($_POST['username']); 
$personel->setPassword($_POST['password']); 
$personel->login(); 

header("Location: index.php"); 


// REDIRECT 
session_start(); 
if (strcasecmp($personel->getRole(), "LTO") == 0 ) { 
    $_SESSION['role'] = "LTO"; 
    $_SESSION['personel'] = $personel; 
    header("Location: LTO"); 
}else if(strcasecmp($personel->getRole(), "LTFRB") == 0){ 
    $_SESSION['role'] = "LTFRB"; 
    $_SESSION['personel'] = $personel; 
    header("Location: LTFRB"); 
}else if(strcasecmp($personel->getRole(), "LGU") == 0){ 
    $_SESSION['role'] = "LGU"; 
    $_SESSION['personel'] = $personel; 
    header("Location: LGU"); 
}else if(strcasecmp($personel->getRole(), "ADMIN") == 0){ 
    $_SESSION['role'] = "ADMIN"; 
    $_SESSION['personel'] = $personel; 
    header("Location: admin"); 
} 
?> 

теперь, когда я пытаюсь получить доступ к любому из них счета я могу легко открыть его index page и другие страницы даже i'am не войти в систему. Как я могу это запретить? и как я могу избежать перезаписи URL?

например. страница индекс администратора

попытке открыть мой link правильный счет админ-администратора и попробуйте неправильный ..

Большое спасибо заранее.

+2

Почему вы вызываете заголовок ("Location: index.php") без каких-либо условий? Это означает, что вы всегда перенаправляетесь на index.php. – Yani

+0

Вы сохранили перенаправление на index.php вне любого условия. Я не вижу, как ваш код сеанса может работать! Кроме того, что делает '$ personel-> login()' делает? Он перенаправляет куда-нибудь? – Tzar

+0

@Tzar Когда я пытаюсь ввести правильные учетные записи. я перехожу на ожидаемую страницу. Хотя, если я пытаюсь ошибаться, он остается с index.php, поэтому я думал, что это правильно – AndroidNewbie

ответ

1

Прежде всего, вам нужно установить перенаправление на index.php в нужное место, с некоторым условием.

Я получаю вашу проблему, но проверяете ли вы сеанс на каждой странице?

Вам необходимо выполнить проверку в начале каждой страницы, независимо от того, установлен ли сеанс правильно или нет. Повторно перенаправить обратно в index.php.

Вы должны реализовать этот код перед каждой страницы:

session_start(); 
if(isset($_SESSION['role'])){ 
    if($_SESSION['role'] != "ADMIN") { //change the "ADMIN" to your unique role per page 
     echo "Access denied"; 
     exit(); 
    } 
else { 
    header("Location: index.php"); 
} 
+0

Я думаю, ты ошибся? – AndroidNewbie

+0

Вы имеете в виду код? Я проверил это. Это правильно. – Tzar

+0

спасибо, что это помогает! – AndroidNewbie

0

Вы вызываете заголовок ("Location: index.php") без каких-либо условий. Это означает, что вы всегда перенаправляетесь на index.php.

Любой вызов login.php приведет к автоматической переадресации на index.php.

Я не знаю, что $ personel-> логин() точно делает, но ваш код должен выглядеть примерно так:

$authorized = $personel->login(); 

if (!$authorized) { 
    header("Location: index.php"); 
    exit(); 
} 

Также - session_start() должны быть в верхней части кода.

Надеюсь, это поможет!

+0

'session_start()' может быть где угодно в коде, если и до тех пор, пока над ним нет переменных '$ _SESSION'! – Tzar

+0

попытайтесь открыть мою [ссылку] (http://itravel.cloudapp.net/itravelWeb2/index.php), правильная учетная запись - admin-admin, также попробуйте не тот. – AndroidNewbie

+0

@Tzar Я знаю, что это просто хорошая практика, чтобы поместить его наверху, чтобы избежать будущих проблем. – Yani

0

Вы можете разместить чек в верхней части каждой страницы, и если пользователь не вошел в перенаправлять их на соответствующую страницу, например, страницу входа.

Вот один из способов сделать это.

При входе, установите переменную $ _SESSION (что-то вроде user_id), как это:

//If successful login: 
$_SESSION['user_id'] = $userid_from_the_db; 

Обратите внимание, что при использовании сессий, вы должны разместить session_start(); на самом верху каждой страницы.

Затем вы можете проверить, был ли пользователь зарегистрирован перед отображением любых данных страницы.

Что-то вроде:

<?php 
    protect_page(); 

Где защиты страницы может выглядеть следующим образом:

if (isset($_SESSION['user_id'])===false) { 
    echo '<p>Please log in first</p>'; 
    echo '<meta HTTP-EQUIV="REFRESH" content="5; url=login.php">'; 
} 

Рассмотрим просмотр (бесплатно) учебник от phpAcademy:

Registration and Login - Procedural version

Registration and Login - OOP version


Примечание:

Вы можете использовать любого из этих методов, чтобы перенаправить страницу:

header("Location: pagename.php");

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

<meta HTTP-EQUIV="REFRESH" content="5; url=pagename.php">

В работе вокруг, вы можете использовать этот метод для перенаправления на страницу, и бонус в том, что он будет ждать определенное количество секунд, прежде чем делать это (5 в этом случае, или ноль, если твой выбор).

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