2011-03-28 8 views
0

두 명의 사용자가있는 PHP 로그인이 있습니다. 모든 것이 제대로 작동하는 것 같지만 무작위로 부팅되어 다시 로그인해야합니다. 내 생각은 내 세션 시간이 초과 되었습니까? 때로는 동일한 로그인을 동시에 사용하는 두 명이 있습니다. 어떤 생각PHP 로그인이 작동하지만 무작위로 쫓겨 난다. 다시 로그인하라는 메시지가 표시됩니다.

<?php //login code 
session_start(); 

if(isset($_POST['user'])) 
{ 
    $password = $_POST['pass']; 
    $user = $_POST['user']; 
     if ($password == "pass" && $user == "user") { 
      $_SESSION['phplogin'] = true; 
      header('Location: index.php'); 
      exit; 
    } else { 

    if(isset($_POST['user'])) 
{ 
    $password = $_POST['pass']; 
    $user = $_POST['user']; 
     if ($password == "pass2" && $user == "user2") { 
      $_SESSION['phplogin'] = true; 
      header('Location: index2.php'); 
      exit; 
} 
}     


?> 

// ===

<?php // approval code 

session_start(); 
if (!isset($_SESSION['phplogin']) 
    || $_SESSION['phplogin'] !== true) { 
    header('Location: login.php'); //Replace that if login.php is somewhere else 
} 

    <?php // index code 
include('approve.php'); 
include('connect.php'); 

?> 
+1

세션이 시간 초과 된 경우 새 세션 쿠키가 생성 될 때 세션 쿠키에 다른 세션 ID가 표시되는 것을 볼 수 있습니다. –

+1

마크 B는 어디서/내가 쿠키 ID를 볼 수 있는지 어떻게 알 수 있습니까? 새로운 백엔드 개발 덕분에. – pixelJockey

+1

브라우저의 쿠키 관리 섹션을 확인하십시오. Firefox에서는 Firebug를 사용하여 쿠키를 보거나 조작 할 수 있습니다. –

답변

0

첫 번째로 코드가 약간 버그가 있으므로 먼저 코드를 입력하면 하드 코딩 된 자격 증명을 작성하는 것이 가장 좋을 것입니다. 각 사용자에 대해 코드를 다시 작성할 필요가 없도록 사용자/패스를 배열에 보관하십시오.

다음 코드를 accounts.php라는 파일을 생성하고 붙여 넣기

<?php 

return array(
    "username" => "password" 
    /*.. More Below ..*/ 
); 

?> 

는 로그인 코드 :

<?php 
session_start(); 

if(!empty($_POST['user']) || !empty($_POST['pass'])) 
{ 
    $users = require('accounts.php'); 

    $pass = $_POST['pass']; 
    $user = $_POST['user']; 

    //loop the accounts. 
    foreach($users as $_username => $_password) 
    { 
     if(strcmp($user,$_username) === 0 && strcomp($pass,$_password) === 0) 
     { 
      //Valid Account 
      $_SESSION['phplogin'] = true; 
      header('Location: index.php'); 
      exit; 
     } 
    } 
?> 

이 충분해야한다,

문제

는 로그 아웃에 대한 그것은있을 수 있습니다 만료 기간 동안 비활성으로 인해 요청이 클라이언트에서 서버로 들어 가지 않으면 세션 가비지 수집기가 세션을 제거합니다. n은 만료되었습니다.

당신이 값을 변경 작동 방법을 포함하는 방법 아래 링크에서 자세한 내용을 RAD 수 있습니다 : 당신이 정적 프로파일 데이터 등의 각 구성원에 대한 사용자 정의 조건을 설정하기를 원한다면

How do I expire a PHP session after 30 minutes?

을, 라우팅 정보 이 1 차원뿐만 아니라 작은 구조 조정에 의해 배열을 증가 할 필요하므로 계정 페이지가 너무과 같습니다

<?php 

return array(
    array(
     "username" => "the_username", 
     "password" => "the_password", 
     "after_login" => "home.html" 
    ) 
    /* More Below */ 
); 

?> 

및 로그인 코드는 다음 slighty를 따라 맞게 변경됩니다.

<?php 
session_start(); 

if(!empty($_POST['user']) || !empty($_POST['pass'])) 
{ 
    $accounts = require('accounts.php'); 

    $pass = $_POST['pass']; 
    $user = $_POST['user']; 

    //loop the accounts. 
    foreach($accounts as $account) 
    { 
     if(strcmp($user,$account['username']) === 0 && strcomp($pass,$account['password']) === 0) 
     { 
      //Valid Account 
      $_SESSION['phplogin'] = true; 
      header('Location: ' . $account['after_login']); 
      exit; 
     } 
    } 
?> 

당신은 내가 크기가 무슨 뜻인지 확실하지 여기에 빠른 예제 경우 :

$array[0][1][10]['username'] 
    /*  | | |  | 
     | | |  | 
     1 2 3  4 > dimension 
    */ 

이 항상이 결합되는 3 차원의 값을 허용하고 1에 바인딩됩니다하기

희망이 도움이됩니다.

+0

멋지다. 내 코드에서 두 사용자가 로그인을 기준으로 색인 페이지를 분리하려고했습니다. 배열로 어떻게하면 될까요? 당신의 도움을 주셔서 감사합니다. – pixelJockey

+0

내 업데이트를 보려면 사용자 정보를 함께 유지하고 로그인 프로세스를 일부 변경하지 않고 배열 내의 깊이를 늘리면됩니다. – RobertPitt

+0

마지막으로 한 번! 이 오류가 발생합니다 ... 치명적인 오류 : /nfs/c03/h01/mnt/49823/domains/domain.com/html/pm/login.php 14 줄에 정의되지 않은 함수 strcomp()를 호출하십시오. – pixelJockey

관련 문제