2014-01-24 5 views
0

내 로그인 양식입니다. 일명 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> 

다음은 내 로그인 검사기입니다. 나는 쉽게도 i'am 로그인이되지는 index page 다른 페이지를 열 수 있습니다 그들로부터 모든 계정에 액세스 할 때 일명 지금

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

을 login.php. 나는 그것을 어떻게 금지 할 수 있는가? 어떻게 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

아무 조건없이 header ("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

내 [link] (http://itravel.cloudapp.net/itravelWeb2/index.php)를 열려고 시도하십시오. 올바른 계정은 admin-admin입니다. 또한 잘못된 것을 시도하십시오. – AndroidNewbie

+0

@Tzar 그 사실을 알고 있습니다. 미래의 문제를 피하기 위해 상단에 배치하는 것이 좋습니다. – Yani

0

, 사용자가 로그인하지 않은 경우에하는 것은 예를 들어, 해당 페이지로 리디렉션 로그인 페이지.

여기에 한 가지 방법이 있습니다. 세션을 사용하는 경우, 각 페이지의 맨 위에 session_start();을 배치해야

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

참고 : 로그인하면

,이 같은 $ _SESSION 변수 ( user_id 같은)을 설정합니다.

그런 다음 페이지 데이터를 표시하기 전에 사용자가 로그인했는지 확인할 수 있습니다.같은

뭔가 : 페이지를 보호

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

이, 선호하는 방법입니다 그러나 당신이 할 수없는 출력이 명령을 사용하기 전에 다른 헤더 그렇지 않으면 실패 할 것입니다. A와

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

해결 방법, 당신은 페이지를 리디렉션이 방법을 사용할 수 있으며, 보너스는이 경우에 이렇게 (5하기 전에 지정된 시간 (초)을 기다리거나 제로 경우 것입니다 당신이 선택).

관련 문제