2017-01-10 1 views
1

인트라넷 용으로 구축하려는 내부 웹 사이트에 대한 로그인 php 양식을 만들었습니다. 하나의 로그인 시스템으로 몇 가지 다른 웹 사이트를 결합하려고합니다. 나는 사용자가 URL 중 하나를 직접 방문 할 경우 사용자가 로그인했는지 여부를 확인할 수있는 방법을보고 싶습니다. 로그인하지 않은 상태에서 로그인 페이지로 리디렉션 한 다음 처음 페이지로 다시 리디렉션하면 로그인 할 수 있습니다.사용자가 로그인했는지 확인하는 방법

사용자 이름과 암호를 쿠키에 기록했습니다. 나는 이것이 안전하지 않다는 것을 안다.하지만 다시 이것은 회사 인트라넷에있는 사내 웹 사이트 일 뿐이다. 그래서 나는 많은 보안을 필요로하지 않는다. 로그인 시스템은 각 사용자가 수행중인 작업을 추적하는 것입니다.

내 로그인 코드가 있지만 이제 사용자가 별도의 웹 페이지에 로그인했는지 여부를 확인하는 방법을 알아야합니다.

//get info from login form 
if(isset($_POST['login'])) { 

$username = $_POST['username']; 
$password = $_POST['password']; 
$rememberme = $_POST['rememberme']; 

$username = mysqli_real_escape_string($connection, $username); 
$password = mysqli_real_escape_string($connection, $password); 
//query users table 
$query = "SELECT * FROM users WHERE username = '{$username}' "; 
$select_user_query = mysqli_query($connection, $query); 

if(!$select_user_query) { 

    die("Query failed" . mysqli_error($connection)); 

} 
//loop through user info and assigning to variables 
while($row = mysqli_fetch_array($select_user_query)) { 

    $db_id = $row['user_id']; 
    $db_username = $row['username']; 
    $db_password = $row['user_password']; 
    $db_firstname = $row['user_firstname']; 
    $db_lastname = $row['user_lastname']; 
    $db_role = $row['user_role']; 

} 

//validate username and password 
if($username === $db_username && $password === $db_password) { 
    //create cookie to remember user 
    if(isset($rememberme)) { 
     //set cookie to last one year 
     setcookie('username', $_POST['username'], time()+60*60*24*365, '/', 'localhost'); 
     setcookie('password', md5($_POST['user_password']), time()+60*60*24*365, '/', 'localhost'); 
    } else { 
     //cookie expires when browser closes 
     setcookie('username', $_POST['username'], false, '/', 'localhost'); 
     setcookie('password', md5($_POST['user_password']), false, '/', 'localhost'); 
    } 

    //if user exists send to dashboard 
    $_SESSION['username'] = $db_username; 
    $_SESSION['user_firstname'] = $db_firstname; 
    $_SESSION['user_lastname'] = $db_lastname; 
    $_SESSION['user_role'] = $db_role; 

    header("Location: ../dashboard.php "); 

} else { 

    header("Location: ../index.php"); 

} 

} 
+0

사용자 아이디로 2 분 이상마다 ajax 호출을 할 수 있습니다. 사용자를 텍스트 파일로 저장하십시오. 아약스가 그치면 사용자가 더 이상 활동하지 않는다는 것을 알 수 있습니다. –

+0

@Roljhon 어떻게 DB로 할 수 있습니까? 나는 아직 PHP와 MySQL에 조금 익숙하지 않다. – JBaldwin

+1

이 질문을 살펴보고 질문에 대한 대답을 확인한다. 나는 그것이 당신이하고 싶은 것을 100 %라고 확신하지는 않지만 가까운 것일 수 있습니다. http://stackoverflow.com/questions/31031344/php-how-to-check-if-user-is-already-logged-in-and-otherwise-redirect-to-login-p – lostInTheTetons

답변

1

는 사용자가 로그인되어 있는지 확인하는 방법은 다음 코드를 다음 리디렉션 처음 방문한 페이지로 이동합니다. 그런 다음 사용하게 될 웹 페이지의 모든에서 해당 파일을 포함

<?php 

session_start(); 
if(!(isset($_SESSION['username']))) 
{ 
    header("Location: index.php"); 
} 

?> 

: 사용자가 로그인 한 경우

먼저 체크를 확인합니다. 또한 URL에 대한 세션을 만듭니다. 이 페이지의 상단에 갈 것입니다 : 추가 바로 HTML의 본문에 그런

<?php include "includes/login-check.php"; ?> 
<?php $_SESSION['url'] = $_SERVER['REQUEST_URI']; ?> 
<?php ob_start(); ?> 

이 :

URL에 세션에 대한 로그인 파일 검사에서 다음
<input type="hidden" name="redirurl" value="<? echo $_SERVER['HTTP_REFERER']; ?>" /> 

:

//check to see what page user first visited 
    if(isset($_SESSION['url'])) { 
     $url = $_SESSION['url']; 
    } else { 
     $url = "../index.php"; 
    } 
    //redirect user to page they initially visited 
    header("Location: $url"); 

질문에 대한 답변이 충분해야합니다.

+0

그게 완벽하고 내가 필요한 모든 것. 위대한 작품, 감사합니다! – JBaldwin

1

당신이 당신의 시스템의 모든 파일의 상단에 포함해야 파일을 생성하고 추가 여기

session_start(); 
if(!(isset($_SESSION['username']))) 
{ 
    header("Location:login.php") 
} 
관련 문제